Подходит. Вам что нужно? Чтобы по достижению определённого уровня прибыли один раз выставлялся стоп в +Х пунктов? Если да, то эксперт это уже делает. так зачем заморачиваться лишними функциями?
Улучшается читаемость кода и исключаются повторяющиеся элементы.
Наиболее удобно, если код разбит на модули разного назначения, и start полностью состоит из вызываемых функций с понятными именами. Потом будет проще модифицировать отдельные элементы программы.
Например, если мы захотим получать MinProfit не в пунктах, а в %-ах от максимально достигнутой прибыли по открытой позиции или в ATR'ах, достаточно будет переписать функцию CheckNeedSetMinProfit()или сделать опцию из нескольких функций похожего назначения.
Прошу по силе и возможности помочь мне разобраться в нюансах синтаксиса MQL4 или увидеть ошибку в написании определенного эксперта. Дело в том, что приклепленный к данному сообщению разрабатываемый мною эксперт точно по алгоритау выполнят действия 1, 2 и 3, а вот действия 4 и 5 не выполняет. Уже целую неделю потратил на проработку различного рода комбинации с кодом, прочитал уйму литературы, а так и не смог добиться, чтобы функции и операторы в пп. 4 и 5 заработали. Прошу пожа-а-а-луйста помочь не потерять надежду на успех, а то "чайник" уже "кипит", а результата нет, просто руки опускаются от безисходности. Заранее премного благодарен!!!!
//+------------------------------------------------------------------+//| Robot.mq4 |//+------------------------------------------------------------------+//-------------------------------------------------------------------+externdouble StopLoss =17;//SL ордераexterndouble TakeProfit =15;//TP ордераexterndouble Lots =0.01;//стоимость ордера//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()//Открытие функции int start() {int total=OrdersTotal();//Определение переменной количества открытых ордеровif(total<1)//Условие: отсутствуют отложенные и открытые ордера{int order1=OrderSend(Symbol(),OP_SELLLIMIT, Lots,Ask+10*Point,3,Ask+(StopLoss+10)*Point,Ask-(TakeProfit-10)*Point);//Открытие ордера order1: SELLLIMITint order2=OrderSend(Symbol(),OP_BUYLIMIT, Lots,Ask-10*Point,3,Ask-(StopLoss+10)*Point,Ask+(TakeProfit-10)*Point);//Открытие ордера order2: BUYLIMIT//------------------------------------------------------------------- 1OrderSelect(order1, SELECT_BY_TICKET, MODE_TRADES);//вызывается ордер1double cena1=OrderOpenPrice();//Определяется цена открытия ордера1int order3=OrderSend(Symbol(),OP_BUYSTOP, Lots, cena1+5*Point,3, cena1+(5-StopLoss)*Point, cena1+(5+TakeProfit)*Point);//Открытие ордера order3: BUYSTOP//------------------------------------------------------------------- 2OrderSelect(order2, SELECT_BY_TICKET, MODE_TRADES);//Вызывается ордер2double cena2=OrderOpenPrice();//Определяется цена открытия ордера2int order4=OrderSend(Symbol(),OP_SELLSTOP, Lots, cena2-5*Point,3, cena2+(StopLoss-5)*Point, cena2-(TakeProfit+5)*Point);//Открытие ордера order4: SELLSTOPreturn(0);//Прекращение исполнения 1-ой функции}//------------------------------------------------------------------- 3OrderSelect(order2, SELECT_BY_TICKET, MODE_TRADES);//Вызывается ордер2double cena3=OrderOpenPrice();//Определяется цена открытия ордера2if(Ask<cena3+5*Point)//Условие: Ask меньше чем цена открытия ордера2 плюс 5 пунктов{OrderModify(order1, cena3+TakeProfit*Point, cena3+(TakeProfit+StopLoss)*Point, cena3,0);//Модификация ордера1 относительно цены открытия ордера2return(0);//Прекращение исполнения 2-ой функции}//------------------------------------------------------------------- 4OrderSelect(order1, SELECT_BY_TICKET, MODE_TRADES);//Вызывается ордер1double cena4=OrderOpenPrice();//Определяется цена открытия ордера1if(Ask>cena4-5*Point)//Условие: Ask ,больше чем цена открытия ордера1 минус 5 пунктов{OrderModify(order2, cena4-TakeProfit*Point, cena4-(TakeProfit+StopLoss)*Point, cena4,0);//Модификация ордера2 относительно цены открытия ордера1return(0);//Прекращение исполнения 3-ей функции}//------------------------------------------------------------------- 5return(0);//Закрытие функции int start()}//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){return(0);}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Опоздал но всё равно предложу свой вариант...
как это можно вставить в этот советник.
Думаю не стоит это вставлять...
Подходит. Вам что нужно? Чтобы по достижению определённого уровня прибыли один раз выставлялся стоп в +Х пунктов? Если да, то эксперт это уже делает. так зачем заморачиваться лишними функциями?
Не получается вставить. ошибки выдает. програмист очень слабый из меня. в основном занимаюсь компиляцией. покажите как надо вставить.
Компиляцией занимается в основном компилятор))
CheckNeedSetMinProfit() - это отдельная функция и должна находиться "снаружи" функции start
Для того, чтобы она выполнялась нужно вызвать ее из ф-ии start в нужных местах.
Вообще в таком виде советник нельзя использовать даже на демо-счете (на тестере гонять можно:-)
Нужны проверки ошибок для всех рыночных функций.
зачем заморачиваться лишними функциями?
Улучшается читаемость кода и исключаются повторяющиеся элементы.
Наиболее удобно, если код разбит на модули разного назначения, и start полностью состоит из вызываемых функций с понятными именами. Потом будет проще модифицировать отдельные элементы программы.
Например, если мы захотим получать MinProfit не в пунктах, а в %-ах от максимально достигнутой прибыли по открытой позиции или в ATR'ах, достаточно будет переписать функцию CheckNeedSetMinProfit() или сделать опцию из нескольких функций похожего назначения.
Я начинающий программист на MQL4/
Прошу по силе и возможности помочь мне разобраться в нюансах синтаксиса MQL4 или увидеть ошибку в написании определенного эксперта. Дело в том, что приклепленный к данному сообщению разрабатываемый мною эксперт точно по алгоритау выполнят действия 1, 2 и 3, а вот действия 4 и 5 не выполняет. Уже целую неделю потратил на проработку различного рода комбинации с кодом, прочитал уйму литературы, а так и не смог добиться, чтобы функции и операторы в пп. 4 и 5 заработали. Прошу пожа-а-а-луйста помочь не потерять надежду на успех, а то "чайник" уже "кипит", а результата нет, просто руки опускаются от безисходности. Заранее премного благодарен!!!!