желательно так:
появился сигнал-направлен ордер на открытие сделки-сделка открылась и ей присвоились ряд параметров-появилась позиция с рядом параметров-КАК В ДАЛЬНЕЙШЕМ РАБОТАТЬ С ПОЗИЦИЕЙ ЧТОБЫ ЕЕ ЗАКРЫТЬ?
желательно так:
появился сигнал-направлен ордер на открытие сделки-сделка открылась и ей присвоились ряд параметров-появилась позиция с рядом параметров-КАК В ДАЛЬНЕЙШЕМ РАБОТАТЬ С ПОЗИЦИЕЙ ЧТОБЫ ЕЕ ЗАКРЫТЬ?
если при открытии позиции ей задан стоплосс и тейкпрофит, то по достижению цены этих уровней позиция сама закроется, даже если рабочий терминал будет выключен,
информация об открытой позиции и ее параметрах хранится на торговом сервере
если при открытии позиции ей задан стоплосс и тейкпрофит, то по достижению цены этих уровней позиция сама закроется, даже если рабочий терминал будет выключен,
информация об открытой позиции и ее параметрах хранится на торговом сервере
это суть задачи, а как код написать. При написании кода и указании в параметрах ордера ТР значения, сделка не закрывается. Я читал, что для закрытия сделки надо как-то через обратный ордер писать
это зависит от того что у вас там в коде сейчас, используется системные библиотека или полный кастом,
суть - получить текущую цену в зависимости от направления сделки, + или - указанное кол-во пунктов*на _Point, нормализовать цену и подставить в нужное поле OrderSend
покажите свой код, быстрее помогут
Хотелось бы такой код без всяких массивов, типа
ордеру присвоилось значение и это значение закрываем при разнице в цене + ТР
простая заготовка пример, для простого робота
сам не использую, нашел в архиве у себя, вроде рабочий вариант
#include <Trade\Trade.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\SymbolInfo.mqh> CTrade trade; CPositionInfo position; CSymbolInfo symb; //--- int Handle; double Buffer_Up[]; double Buffer_Down[]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(!symb.Name(Symbol())) // sets symbol name return(INIT_FAILED); Handle=iCustom(Symbol(),PERIOD_CURRENT,"ind_name"); //--- Если не удалось получить хендл индикатора if(Handle==INVALID_HANDLE) Print("Не удалось получить хэндл индикатора_1 для символа "+_Symbol+"!"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- Вывести в журнал причину деинициализации Print(reason); IndicatorRelease(Handle); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick(void) { //--- Установим обратный порядок индексации (... 3 2 1 0) ArraySetAsSeries(Buffer_Up,true); ArraySetAsSeries(Buffer_Down,true); //--- if(CopyBuffer(Handle,0,1,30,Buffer_Up)==-1) {Print("Не удалось скопировать значения Handle"); return;} if(CopyBuffer(Handle,1,1,30 ,Buffer_Down)==-1) {Print("Не удалось скопировать значения Handle"); return;} //--- Trading(); } //+------------------------------------------------------------------+ //| Open position | //+------------------------------------------------------------------+ void Trading() { bool signal_Buy=true; bool signal_Sell=true; //--- Получим цены ask и bid double _ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); double _bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); double _tp=0.0, _sl=0.0, _abc=0.0, _round=0.0, value=0.0; //--- Узнаем, есть ли позиция bool pos_exists=PositionSelect(Symbol()); ENUM_POSITION_TYPE pos_type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); ENUM_ORDER_TYPE order_type=WRONG_VALUE; //--- Если позиции нет if(!pos_exists) { //--- Сигнал на продажу : if(signal_Buy) { order_type=ORDER_TYPE_BUY; _sl=NormalizeDouble(value,_Digits); _abc=MathCeil((_ask-value)/_Point); _tp=NormalizeDouble(_ask+((_abc+50)*_Point),_Digits); //--- if(_sl!=0.0) trade.Buy(0.1,Symbol(),0,_sl,_tp,"123"); } //--- Сигнал на покупку : if(signal_Sell) { order_type=ORDER_TYPE_SELL; _sl=NormalizeDouble(value,_Digits); _abc=MathCeil((value-_bid)/_Point); _tp=NormalizeDouble(_bid-((_abc+50)*_Point),_Digits); //--- if(_sl!=0.0) trade.Sell(0.1,Symbol(),0,_sl,_tp,"123"); } } //--- Если позиция есть if(pos_exists) { } //--- }
Хотелось бы такой код без всяких массивов, типа
ордеру присвоилось значение и это значение закрываем при разнице в цене + ТР
Здравствуйте, Михаил! Всё это есть в Справочнике MQL5. Попытайтесь его освоить и использовать, как настольную книгу.
А пока, вот Вам код:
//+------------------------------------------------------------------+ //| Open_Position_Buy.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Input parameters | //+------------------------------------------------------------------+ input ushort Stop_Loss=500; //Стоп-лосс input ushort Take_Profit=500; //Тейк-профит input ulong Magic_Number=15430; //Магическое число //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(!PositionSelect(_Symbol)) Open_Pos_Buy(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Open_Pos_Buy() { //--- объявим и инициализируем переменные запроса и результата MqlTradeRequest request; MqlTradeResult result; //--- обнулим переменные ZeroMemory(request); ZeroMemory(result); //--- объявим и инициализируем переменную для цены позиции double price_position=SymbolInfoDouble(_Symbol,SYMBOL_ASK); //--- создадим параметры запроса на торговый сервер request.action =TRADE_ACTION_DEAL; // тип торговой операции request.symbol =_Symbol; // символ request.volume =0.1; // объем в 0.1 лот request.type =ORDER_TYPE_BUY; // тип ордера request.price =price_position; // цена для открытия request.deviation=5; // допустимое отклонение от цены request.magic =Magic_Number; // MagicNumber ордера request.sl=price_position-Stop_Loss*_Point; // стоп-лосс request.tp=price_position+Take_Profit*_Point; // тейк-профит //--- отправка запроса if(!OrderSend(request,result)) // если отправить запрос не удалось PrintFormat("OrderSend error %d",GetLastError()); // выведем код ошибки //--- информация об операции PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } //+------------------------------------------------------------------+
С уважением, Владимир.
Здравствуйте, Михаил! Всё это есть в Справочнике MQL5. Попытайтесь его освоить и использовать, как настольную книгу.
А пока, вот Вам код:
С уважением, Владимир.
а для кого тут разработчиками сделаны системные библиотеки?)
#include <Trade\Trade.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\SymbolInfo.mqh>
структуры типа
MqlTradeRequest request; MqlTradeResult result;
явно не для Просто заполнить поля и отправить ордер на пересечениях 2-МА
Здравствуйте, Михаил! Всё это есть в Справочнике MQL5. Попытайтесь его освоить и использовать, как настольную книгу.
А пока, вот Вам код:
С уважением, Владимир.
Спасибо большое Владимир! То что надо!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые товарищи!
В рамках самообучения MQL5 не могу разобраться как закрывать открытую сделку по тейкпрофиту. Код написал, условия от индикаторов проверяются, сделки открываются, а закрывать сделки не могу научить советника.
Каждый Ваш совет "+" в копилочку знаний, но желательно чем проще, тем лучше