Маленькая помощь, необходимая для кода EA
Results 1 to 4 of 4

Thread: Маленькая помощь, необходимая для кода EA

  1. #1
    Ниже приведен EA, который я использую в качестве шаблона для создания EA для используемой системы. Я не опытный программист, и я надеюсь, что этот проект позволит мне построить мои знания mql4. Код ниже работает хорошо, но я застрял на одной небольшой части. В настоящее время у этого эксперта будет только одна открытая сделка. Я бы хотел, чтобы одновременные сделки были возможны. Может кто-то, пожалуйста, быстро просмотрите код и сообщите мне, какая часть ограничивает это. Я считаю, что это может быть раздел позиции проверки. Большое спасибо.


    Quote Originally Posted by ;
    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4
    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EveryTickMode = False;
    extern double Lots = 1.0;
    extern int Slippage = 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = False;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 30;
    int BarCount;
    int Current;
    bool TickCheck = False;
    // ----------------------------------------------- -------------------
    //| экспертная функция инициализации |
    // ----------------------------------------------- -------------------
    int init () {
    BarCount = Бары;
    if (EveryTickMode) Current = 0; else Current = 1;
    Возвращение (0);
    }
    // ----------------------------------------------- -------------------
    //| экспертная деинициализация |
    // ----------------------------------------------- -------------------
    int deinit () {
    Возвращение (0);
    }
    // ----------------------------------------------- -------------------
    //| функция запуска эксперта |
    // ----------------------------------------------- -------------------
    int start () {
    int Order = SIGNAL_NONE;
    int Total, Ticket;
    double StopLossLevel, TakeProfitLevel;

    if (EveryTickMode Bars! = BarCount) TickCheck = False;
    Всего = OrdersTotal ();
    Заказ = SIGNAL_NONE;
    // ----------------------------------------------- -------------------
    //| Переменная начинается |
    // ----------------------------------------------- -------------------

    double Buy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Buy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double Sell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Sell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseBuy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseBuy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseSell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseSell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);

    // ----------------------------------------------- -------------------
    //| Переменный конец |
    // ----------------------------------------------- -------------------
    //Проверить позицию
    bool IsTrade = False;
    for (int i = 0; i lt; Total; i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (OrderType () lt; = OP_SELL OrderSymbol () == Символ ()) {
    IsTrade = True;
    if (OrderType () == OP_BUY) {
    //Близко
    // ----------------------------------------------- -------------------
    //| Начало сигнала (выход) |
    // ----------------------------------------------- -------------------
    if (CloseBuy1_1 lt; CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

    // ----------------------------------------------- -------------------
    //| Выход сигнала (выход) |
    // ----------------------------------------------- -------------------
    if (Order == SIGNAL_CLOSEBUY ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Bid, Slippage, MediumSeaGreen);
    if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Close Buy);
    if (! EveryTickMode) BarCount = Bars;
    IsTrade = False;
    Продолжить;
    }
    //Трейлинг-стоп
    if (UseTrailingStop TrailingStop gt; 0) {
    if (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
    if (OrderStopLoss () lt; Bid - Point * TrailingStop) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Bid-Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
    if (! EveryTickMode) BarCount = Bars;
    Продолжить;
    }
    }
    }
    } else {
    //Близко
    // ----------------------------------------------- -------------------
    //| Начало сигнала (выход на продажу) |
    // ----------------------------------------------- -------------------
    if (CloseSell1_1 gt; CloseSell1_2) Заказ = SIGNAL_CLOSESELL;

    // ----------------------------------------------- -------------------
    //| Окончание сигнала (выход на продажу) |
    // ----------------------------------------------- -------------------
    if (Order == SIGNAL_CLOSESELL ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
    if (SignalMail) SendMail ([Сигнальное оповещение], [ Символ () ] DoubleToStr (Ask, Digits) Закрыть продать);
    if (! EveryTickMode) BarCount = Bars;
    IsTrade = False;
    Продолжить;
    }
    //Трейлинг-стоп
    if (UseTrailingStop TrailingStop gt; 0) {
    if ((OrderOpenPrice () - Ask) gt (Point * TrailingStop)) {
    if ((OrderStopLoss () gt (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
    if (! EveryTickMode) BarCount = Bars;
    Продолжить;
    }
    }
    }
    }
    }
    }
    // ----------------------------------------------- -------------------
    //| Начало сигнала (вход) |
    // ----------------------------------------------- -------------------
    if (Buy1_1) Buy1_2) Order = SIGNAL_BUY;
    if (Sell1_1 lt; Sell1_2) Order = SIGNAL_SELL;

    // ----------------------------------------------- -------------------
    //| Сигнальный конец |
    // ----------------------------------------------- -------------------
    //Купить
    if (Order == SIGNAL_BUY ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    if (! IsTrade) {
    //Проверка свободного поля
    if (AccountFreeMargin () lt; (1000 * Lots)) {
    Печать (у нас нет денег. Свободная маржа =, AccountFreeMargin ());
    Возвращение (0);
    }
    if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Ask TakeProfit * Point; else TakeProfitLevel = 0.0;
    Ticket = OrderSend (Символ (), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
    if (Ticket gt; 0) {
    if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Печать (открыт заказ BUY:, OrderOpenPrice ());
    if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Ask, Digits) Open Buy);
    } else {
    Печать (Ошибка открытия порядка покупки:, GetLastError ());
    }
    }
    if (EveryTickMode) TickCheck = True;
    if (! EveryTickMode) BarCount = Bars;
    Возвращение (0);
    }
    }
    //Продам
    if (Order == SIGNAL_SELL ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    if (! IsTrade) {
    //Проверка свободного поля
    if (AccountFreeMargin () lt; (1000 * Lots)) {
    Печать (у нас нет денег. Свободная маржа =, AccountFreeMargin ());
    Возвращение (0);
    }
    if (UseStopLoss) StopLossLevel = Bid ​​ StopLoss * Point; else StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Bid ​​- TakeProfit * Point; else TakeProfitLevel = 0.0;
    Ticket = OrderSend (Символ (), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell (# MagicNumber ), MagicNumber, 0, DeepPink);
    if (Ticket gt; 0) {
    if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Печать (открыт ордер на продажу:, OrderOpenPrice ());
    if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Open Sell);
    } else {
    Печать (Ошибка открытия порядка продажи:, GetLastError ());
    }
    }
    if (EveryTickMode) TickCheck = True;
    if (! EveryTickMode) BarCount = Bars;
    Возвращение (0);
    }
    }
    if (! EveryTickMode) BarCount = Bars;
    Возвращение (0);
    }
    // ----------------------------------------------- -------------------
    Quote Originally Posted by ;
    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4
    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EveryTickMode = False;
    extern double Lots = 1.0;
    extern int Slippage = 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = False;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 30;
    int BarCount;
    int Current;
    bool TickCheck = False;
    // ----------------------------------------------- -------------------
    //| экспертная функция инициализации |
    // ----------------------------------------------- -------------------
    int init () {
    BarCount = Бары;
    if (EveryTickMode) Current = 0; else Current = 1;
    Возвращение (0);
    }
    // ----------------------------------------------- -------------------
    //| экспертная деинициализация |
    // ----------------------------------------------- -------------------
    int deinit () {
    Возвращение (0);
    }
    // ----------------------------------------------- -------------------
    //| функция запуска эксперта |
    // ----------------------------------------------- -------------------
    int start () {
    int Order = SIGNAL_NONE;
    int Total, Ticket;
    double StopLossLevel, TakeProfitLevel;

    if (EveryTickMode Bars! = BarCount) TickCheck = False;
    Всего = OrdersTotal ();
    Заказ = SIGNAL_NONE;
    // ----------------------------------------------- -------------------
    //| Переменная начинается |
    // ----------------------------------------------- -------------------

    double Buy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Buy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double Sell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Sell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseBuy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseBuy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseSell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseSell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);

    // ----------------------------------------------- -------------------
    //| Переменный конец |
    // ----------------------------------------------- -------------------
    //Проверить позицию
    bool IsTrade = False;
    for (int i = 0; i lt; Total; i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (OrderType () lt; = OP_SELL OrderSymbol () == Символ ()) {
    IsTrade = True;
    if (OrderType () == OP_BUY) {
    //Близко
    // ----------------------------------------------- -------------------
    //| Начало сигнала (выход) |
    // ----------------------------------------------- -------------------
    if (CloseBuy1_1 lt; CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

    // ----------------------------------------------- -------------------
    //| Выход сигнала (выход) |
    // ----------------------------------------------- -------------------
    if (Order == SIGNAL_CLOSEBUY ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Bid, Slippage, MediumSeaGreen);
    if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Close Buy);
    if (! EveryTickMode) BarCount = Bars;
    IsTrade = False;
    Продолжить;
    }
    //Трейлинг-стоп
    if (UseTrailingStop TrailingStop gt; 0) {
    if (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
    if (OrderStopLoss () lt; Bid - Point * TrailingStop) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Bid-Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
    if (! EveryTickMode) BarCount = Bars;
    Продолжить;
    }
    }
    }
    } else {
    //Близко
    // ----------------------------------------------- -------------------
    //| Начало сигнала (выход на продажу) |
    // ----------------------------------------------- -------------------
    if (CloseSell1_1 gt; CloseSell1_2) Заказ = SIGNAL_CLOSESELL;

    // ----------------------------------------------- -------------------
    //| Окончание сигнала (выход на продажу) |
    // ----------------------------------------------- -------------------
    if (Order == SIGNAL_CLOSESELL ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
    if (SignalMail) SendMail ([Сигнальное оповещение], [ Символ () ] DoubleToStr (Ask, Digits) Закрыть продать);
    if (! EveryTickMode) BarCount = Bars;
    IsTrade = False;
    Продолжить;
    }
    //Трейлинг-стоп
    if (UseTrailingStop TrailingStop gt; 0) {
    if ((OrderOpenPrice () - Ask) gt (Point * TrailingStop)) {
    if ((OrderStopLoss () gt (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
    if (! EveryTickMode) BarCount = Bars;
    Продолжить;
    }
    }
    }
    }
    }
    }
    // ----------------------------------------------- -------------------
    //| Начало сигнала (вход) |
    // ----------------------------------------------- -------------------
    if (Buy1_1) Buy1_2) Order = SIGNAL_BUY;
    if (Sell1_1 lt; Sell1_2) Order = SIGNAL_SELL;

    // ----------------------------------------------- -------------------
    //| Сигнальный конец |
    // ----------------------------------------------- -------------------
    //Купить
    if (Order == SIGNAL_BUY ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    if (! IsTrade) {
    //Проверка свободного поля
    if (AccountFreeMargin () lt; (1000 * Lots)) {
    Печать (у нас нет денег. Свободная маржа =, AccountFreeMargin ());
    Возвращение (0);
    }
    if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Ask TakeProfit * Point; else TakeProfitLevel = 0.0;
    Ticket = OrderSend (Символ (), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
    if (Ticket gt; 0) {
    if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Печать (открыт заказ BUY:, OrderOpenPrice ());
    if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Ask, Digits) Open Buy);
    } else {
    Печать (Ошибка открытия порядка покупки:, GetLastError ());
    }
    }
    if (EveryTickMode) TickCheck = True;
    if (! EveryTickMode) BarCount = Bars;
    Возвращение (0);
    }
    }
    //Продам
    if (Order == SIGNAL_SELL ((EveryTickMode! TickCheck) || (! EveryTickMode (Bars! = BarCount)))) {
    if (! IsTrade) {
    //Проверка свободного поля
    if (AccountFreeMargin () lt; (1000 * Lots)) {
    Печать (у нас нет денег. Свободная маржа =, AccountFreeMargin ());
    Возвращение (0);
    }
    if (UseStopLoss) StopLossLevel = Bid ​​ StopLoss * Point; else StopLossLevel = 0.0;
    if (UseTakeProfit) TakeProfitLevel = Bid ​​- TakeProfit * Point; else TakeProfitLevel = 0.0;
    Ticket = OrderSend (Символ (), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell (# MagicNumber ), MagicNumber, 0, DeepPink);
    if (Ticket gt; 0) {
    if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Печать (открыт ордер на продажу:, OrderOpenPrice ());
    if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Open Sell);
    } else {
    Печать (Ошибка открытия порядка продажи:, GetLastError ());
    }
    }
    if (EveryTickMode) TickCheck = True;
    if (! EveryTickMode) BarCount = Bars;
    Возвращение (0);
    }
    }
    if (! EveryTickMode) BarCount = Bars;
    Возвращение (0);
    }
    // ----------------------------------------------- -------------------

  2. #2
    Ваш код слишком сложно читать! попробуйте отделить соответствующие части и, возможно, вставить части в функции, чтобы вам не приходилось читать через множество строк, чтобы понять, что происходит. С быстрым взглядом, может быть, вы устанавливаете IsTrade = True; и, следовательно, он не разрешает другую торговлю, потому что торговля уже истинна HTH

  3. #3
    Да, это код построителя EA ... Я предлагаю вам использовать другой шаблон для создания EAs, но если вы настаиваете на использовании этого, вам придется возиться с переменной IsTrade. По существу, измените его на двойную переменную, и каждый OrderSend добавит 1 к счету торговли. Итак, прежде чем размещать заказы, убедитесь, что количество сделок меньше определенной переменной MaxTrades. Что-то вроде того.

  4. #4
    Вложений: 1 Привет jcalow, я добавил 2 новых переменных. extern bool UseIsTrade = false; extern int Maxtrades = 5; UseIsTrade: если для этого параметра установлено значение false, он игнорирует все объявления переменной IsTrade и любые изменения его значения. Противоположно, когда установлено значение true. Maxtrades: Это контрольная переменная счетчика. В основном он будет подсчитывать количество открытых торгов, открытых вашим советником, независимо от того, является ли это сделкой «ПОКУПКА» или «ПРОДАВАТЬ». Это делается с помощью Magic Number, установленного вашим советником. Он также проверит, открываются ли торги соответствующей валютной парой. Если количество открытых торгов больше или равно максимальному числу. сделок, как указано, это не позволит EA открывать новые сделки. В двух словах Если я установил Maxtrades на значение 5, и если у меня уже 5 открытых торгов, EA перестанет открывать новые.
    https://www.forex-russian.com/attach...3665102391.mq4

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.