... тут люди в кои-то веки пытаются помочь новичкам.
Всем доброго дня и хорошего настроения!
Спасибо всем, кто пытается мне помочь! Результат от Вашей помощи уже есть. Теперь осознано нахожу нужную мне информацию (учебник, документация сайта и т.п.), с помощью которой продолжаю самообучение. Обращаю особое внимание на то, что для написания кода данного скрипта ипользовал только Справочник MQL5!
Сегодня выкладываю код скрипта New7.mq5, который является доработанной версией скрипта New6.mq5. В новом скрипте реализована возможность устанавливать уровни Stop Loss (остановить убыток) и Take Profit (взять прибыль). В данном скрипте постарался всё расписать, как ранее и обещал, в доступном изложении для ученика 1-го класса школы программирования.
С уважением, Владимир.
//+------------------------------------------------------------------+//| New7.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//---#property script_show_inputs//---/* Продолжаем изучение языка программирования MQL5. В этот раз мы добавим в код скрипта, созданный
нами ранее под именем New6.mq5, возможность устанавливать уровни Stop Loss (остановить убыток)
и Take Profit (взять прибыль). Данные уровни позволят в ходе торговли автоматизировать процесс
ограничения убытков и фиксации прибыли в то время, когда у нас отсутствует возможность находиться
перед торговым терминалом. Во входных параметрах скрипта создадим две переменные: SL (стоп лосс)
и TP (тейк профит). Для них применим модификатор input и тип данных double. Чтобы постоянно не
повторять комментарии, написанные в предыдущем скрипте New6.mq5, мы уберем всё лишнее и будем
пояснять только те участки кода, которые добавим в данном скрипте. Итак, приступим. По нашей
задумке нужно написать часть кода скрипта, который будет отвечать за Stop Loss и Take Profit.
Снова обращаемся к Справочнику MQL5, в котором ищем раздел MqlTradeRequest. В нём мы находим
информацию о том, что необходимо создать ещё два запроса: request.sl (для уровня Stop Loss ордера)
и request.tp (для уровня Take Profit ордера). Дописываем в скрипт недостающие части кода.*//* Добавим в код скрипта необходимые переменные SL и TP.*/inputdouble SL=300; //Стоп лоссinputdouble TP=500; //Тейк профит//---inputint Distance=100; //Отступ отложенного ордера от текущей ценыinputdouble Lots=0.01; //Фиксированный размер лотаinputlong Pending_magic=86513; //Магический номер ордера//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
MqlTradeRequest request= {0};
MqlTradeResult result= {0};
request.action=TRADE_ACTION_PENDING;
request.symbol=Symbol();
request.volume=Lots;
request.deviation=2;
request.magic=Pending_magic;
double price;
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
{
request.type=ORDER_TYPE_BUY_STOP;
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)+Distance*point;
request.price=NormalizeDouble(price,digits);
/* Теперь создаем два запроса на торговый сервер: request.sl и request.tp, в котором указываем, где
должны находиться уровни стоп лосс и тейк профит относительно цены отложенного ордера "BUY_STOP".
Уровень SL должен быть ниже цены (поэтому пишем price-SL*point), а уровень TP должен быть выше цены
(поэтому пишем price+TP*point). Для нормализации уровней SL и TP мы применим функцию преобразования
данных NormalizeDouble, где обязательно умножим каждый из уровней на point (размер одного пункта)
и укажем digits (количество знаков после запятой).*/
request.sl=NormalizeDouble(price-SL*point,digits);
request.tp=NormalizeDouble(price+TP*point,digits);
//---
}
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError());
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
{
request.type=ORDER_TYPE_SELL_STOP;
price=SymbolInfoDouble(Symbol(),SYMBOL_BID)-Distance*point;
request.price=NormalizeDouble(price,digits);
/* Точно также создадим ещё два новых запроса на торговый сервер: request.sl и request.tp, в котором укажем,
где должны находиться уровни стоп лосс и тейк профит относительно цены отложенного ордера "SELL_STOP".
Уровень SL теперь должен находиться выше цены (поэтому пишем price+SL*point), а уровень TP должен
находиться ниже цены (поэтому пишем price-TP*point). Снова для нормализации уровней SL и TP мы применим
функцию преобразования данных NormalizeDouble, где обязательно умножим каждый из уровней на point (размер
одного пункта) и укажем digits (количество знаков после запятой).*/
request.sl=NormalizeDouble(price+SL*point,digits);
request.tp=NormalizeDouble(price-TP*point,digits);
}
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError());
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
/* Всё! Наш новый скрипт готов. Компилируем и запускаем скрипт. Как компилировать и запускать скрипт мы
уже узнали, когда создавали скрипт New2.mq5.*///+------------------------------------------------------------------+
Спасибо всем, кто пытается мне помочь! Результат от Вашей помощи уже есть. Теперь осознано нахожу нужную мне информацию (учебник, документация сайта и т.п.), с помощью которой продолжаю самообучение. Обращаю особое внимание на то, что для написания кода данного скрипта ипользовал только Справочник MQL5!
Сегодня выкладываю код скрипта New7.mq5, который является доработанной версией скрипта New6.mq5. В новом скрипте реализована возможность устанавливать уровни Stop Loss (остановить убыток) и Take Profit (взять прибыль). В данном скрипте постарался всё расписать, как ранее и обещал, в доступном изложении для ученика 1-го класса школы программирования.
С уважением, Владимир.
В Вашем коде есть строка:
#define orderType1 "BUY_STOP"//Тип ордера UP
Она означает, что когда в коде встретится 'orderType1' оно будет заменено на "BUY_STOP".
Ну, а я о чем тебе говорил?))) База и еще раз база должна быть. Сначала читать/конспектировать учебник 3-4 месяца, а потом что то писать. Через год можно приступить к ООП.
Реter Konow: Ну, а я о чем тебе говорил?))) База и еще раз база должна быть. Сначала читать/конспектировать учебник 3-4 месяца, а потом что то писать. Через год можно приступить к ООП.
Да тут не до базы даже. У человека мешанина в голове. Корабль пошел ко дну, но к нему старательно лепятся паруса (тейк-профит, стоп-лосс, трейлинг в будущем).
Реter Konow: По сути, условие выше всегда истина, как 2 = 2. Поэтому if (оператор условия) здесь не работает, а компилятор выдаст предупреждение на такой код.
А теперь автор ветки должен последовать твоему совету Петр, и сказать "я так вижу, я художник!".
Скорее всего чего-то недопонял, раз такая реакция.
В скрипте New6.mq5 мною было записано условие: "Для отложенных ордеров Buy Stop и Sell Stop вместо input применим новую для нас директиву #define. Она позволит нам задавать в коде скрипта нужные типы отложенных ордеров, но при этом они не будут отображаться во входных параметрах скрипта при запуске его в работу. Зададим переменные, определяющие типы отложенных ордеров orderType1 и orderType2. Для этих переменных запишем имена "BUY_STOP" и "SELL_STOP"".
Прошу подсказать, что неправильно сделал в плане реализации данного условия.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
... тут люди в кои-то веки пытаются помочь новичкам.
Всем доброго дня и хорошего настроения!
Спасибо всем, кто пытается мне помочь! Результат от Вашей помощи уже есть. Теперь осознано нахожу нужную мне информацию (учебник, документация сайта и т.п.), с помощью которой продолжаю самообучение. Обращаю особое внимание на то, что для написания кода данного скрипта ипользовал только Справочник MQL5!
Сегодня выкладываю код скрипта New7.mq5, который является доработанной версией скрипта New6.mq5. В новом скрипте реализована возможность устанавливать уровни Stop Loss (остановить убыток) и Take Profit (взять прибыль). В данном скрипте постарался всё расписать, как ранее и обещал, в доступном изложении для ученика 1-го класса школы программирования.
С уважением, Владимир.
Всем доброго дня и хорошего настроения!
Спасибо всем, кто пытается мне помочь! Результат от Вашей помощи уже есть. Теперь осознано нахожу нужную мне информацию (учебник, документация сайта и т.п.), с помощью которой продолжаю самообучение. Обращаю особое внимание на то, что для написания кода данного скрипта ипользовал только Справочник MQL5!
Сегодня выкладываю код скрипта New7.mq5, который является доработанной версией скрипта New6.mq5. В новом скрипте реализована возможность устанавливать уровни Stop Loss (остановить убыток) и Take Profit (взять прибыль). В данном скрипте постарался всё расписать, как ранее и обещал, в доступном изложении для ученика 1-го класса школы программирования.
С уважением, Владимир.
В Вашем коде есть строка:
Она означает, что когда в коде встретится 'orderType1' оно будет заменено на "BUY_STOP".
То есть вместо строки:
Будет строка:
Вы действительно именно этого хотите?
В Вашем коде есть строка:
Она означает, что когда в коде встретится 'orderType1' оно будет заменено на "BUY_STOP".
То есть вместо строки:
Будет строка:
Вы действительно именно этого хотите?
Сейчас ещё раз внимательнее прочитаю документацию и потом отвечу.
С уважением, Владимир.
Koldun Zloy:
... Вы действительно именно этого хотите?
На данный момент "да".
С уважением, Владимир.
На данный момент "да".
Вот и приплыли...
Вот и приплыли...
На данный момент "да".
С уважением, Владимир.
Вот этот момент подробней надо было расписать. Это конечно рабочий вариант, но слишком неожиданный))))
Лучше вначале дать описание, что будет делать скрипт, схематично алгоритм. Вопросов будет меньше, а замечания конкретней)
На данный момент "да".
С уважением, Владимир.
Ну, а я о чем тебе говорил?))) База и еще раз база должна быть. Сначала читать/конспектировать учебник 3-4 месяца, а потом что то писать. Через год можно приступить к ООП.
Да тут не до базы даже. У человека мешанина в голове. Корабль пошел ко дну, но к нему старательно лепятся паруса (тейк-профит, стоп-лосс, трейлинг в будущем).
По сути, условие выше всегда истина, как 2 = 2. Поэтому if (оператор условия) здесь не работает, а компилятор выдаст предупреждение на такой код.
А теперь автор ветки должен последовать твоему совету Петр, и сказать "я так вижу, я художник!".
Вот и приплыли...
Скорее всего чего-то недопонял, раз такая реакция.
В скрипте New6.mq5 мною было записано условие: "Для отложенных ордеров Buy Stop и Sell Stop вместо input применим новую для нас директиву #define. Она позволит нам задавать в коде скрипта нужные типы отложенных ордеров, но при этом они не будут отображаться во входных параметрах скрипта при запуске его в работу. Зададим переменные, определяющие типы отложенных ордеров orderType1 и orderType2. Для этих переменных запишем имена "BUY_STOP" и "SELL_STOP"".
Прошу подсказать, что неправильно сделал в плане реализации данного условия.
С уважением, Владимир.