Trade/Trade.mqh

 
Подскажите как с помощью класса Trade/Trade.mqh модифицировать позиции для выставления стопа и тейка или как открыть позицию со стопом и тейком сразу. Модифицировать тоже интересно, так как позже буду реализовывать подтягивание стопа в безубыток. 
Открыть позицию получилось, а выставить стоп и тейк не выходит. 
Благодарю за советы))

На данный момент открытие позиции реализовано так 

if(cl>op)                  //сигнал для примера
  {trade.Buy(Lots);}

Если ничего не путаю, по памяти писала
 
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionModify
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionModify
  • www.mql5.com
Успешное окончание работы метода PositionModify(...) не всегда означает успешное совершение торговой операции. Необходимо проверять результат выполнения торгового запроса (код возврата торгового сервера) вызовом метода ResultRetcode(). При...
 

спасибо, я не смогла найти в стандартном справочнике)

 
sofi563:

спасибо, я не смогла найти в стандартном справочнике)

Давайте лучше по порядку. 

Как открыть позицию сразу с указанием Стоп лосс и Тейк профит. Такая постановка вопроса устраивает? Если да, то я приведу пример (простой пример).

 
sofi563:
Открыть позицию получилось, а выставить стоп и тейк не выходит. 
Благодарю за советы))

стоп и тейк - можно по пунктам закрывать (скрыт от брокера)


	          
Файлы:
 
Vladimir Karputov:

Давайте лучше по порядку. 

Как открыть позицию сразу с указанием Стоп лосс и Тейк профит. Такая постановка вопроса устраивает? Если да, то я приведу пример (простой пример).

да давайте так. я уже попыталась, почему то стоп и тейк не получается. еще пока не могу сообразить как прописать цену входа, понятно что надо присвоить цену BID переменой (дать ей имя) и использовать. но щас поздно уже, пока сделано по простому.

сделку открывает, стоп и тейк не ставит. хотя вывожу в Сomment, подсчет правильный. в журнал почему то перестали выводиться данные((

input int   Lots  =1;
input int   TPpr =50;
input int   SLpr =10;
input int   DDpr =40; //цена прошла 40% запрет входа
//----------------------------------------------------------------
double ATR  = ATRm[1]; //значение дневного АТР вчерашнего дня
 double TP   = ATR/100*TPpr;
 double SL   = ATR/100*SLpr;  // значение от атр 50% 
 double DD   = ATR/100*DDpr;  
 
 double PR   = PositionGetDouble(POSITION_PRICE_OPEN); //цена открытия
 
 double PRTPl = PR+TP; //цена для тейка лонга
 double PRSLl = PR-SL; //цена для стопа лонга
 double PRTPs = PR-TP; // цена для тейка шорта
 double PRSLs = PR+SL; // цена для стопа шорта
//-------------------------------------------------------------------
double ATR  = ATRm[1]; //значение дневного АТР вчерашнего дня
 double TP   = ATR/100*TPpr;
 double SL   = ATR/100*SLpr;  // значение от атр 50% 
 double DD   = ATR/100*DDpr;  
 
 double PR   = PositionGetDouble(POSITION_PRICE_OPEN); //цена открытия
 
 double PRTPl = PR+TP; //цена для тейка лонга
 double PRSLl = PR-SL; //цена для стопа лонга
 double PRTPs = PR-TP; // цена для тейка шорта
 double PRSLs = PR+SL; // цена для стопа шорта
//----------------------------------------------------------------
 if (cl>op)                 
        {
         trader.Buy(Lots,NULL,cl,PRTPl,PRSLl);     //то вход в лонг                                             
        }
 
sofi563:

да давайте так. я уже попыталась, почему то стоп и тейк не получается. еще пока не могу сообразить как прописать цену входа, понятно что надо присвоить цену BID переменой (дать ей имя) и использовать. но щас поздно уже, пока сделано по простому.

сделку открывает, стоп и тейк не ставит. хотя вывожу в Сomment, подсчет правильный. в журнал почему то перестали выводиться данные((

Что это? Не нужно выдавать куски кода - прикрепите к сообщению полноценный файл, который можно скомпилировать.

Сейчас получается, что ВСЕ Ваши переменные находятся в области глобальных программных переменных - то есть они НЕ ВЫЧИСЛЯЮТСЯ.

 
Vladimir Karputov:

Что это? Не нужно выдавать куски кода - прикрепите к сообщению полноценный файл, который можно скомпилировать.

Сейчас получается, что ВСЕ Ваши переменные находятся в области глобальных программных переменных - то есть они НЕ ВЫЧИСЛЯЮТСЯ.

как только добавляю значения стопа, перестает открывать сделку. почему? понять не могу. 

trader.Buy(Lots,NULL,cl,PRTPl,PRSLl); если отсюда убрать PRTPl,PRSLl то будет открываться


//+------------------------------------------------------------------+
//|                                                          1ый.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input double   Lots  =1.0;
input int   TPpr =50;
input int   SLpr =10;
input int   DDpr =40; //цена прошла 40% запрет входа

int ATRy;       //указатель на индикато атр
double ATRm[];   //массив для атр
//------------------------------------------
#include <Trade\Trade.mqh>

CTrade trader;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
ATRy = iATR(NULL,PERIOD_D1,5);
     if (ATRy == INVALID_HANDLE)
     {
        Print("не удалось создать описатель индикатора XLO");
        return(INIT_FAILED);
     }   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 {
    
    IndicatorRelease(ATRy);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 datetime time = D'1980.07.19 10:01:00'; 
  string TCtime = TimeToString(time,TIME_SECONDS);
   
  datetime timeCurrent = TimeCurrent();
  string TC = TimeToString(timeCurrent,TIME_SECONDS);
//----------------------------------------------------------     
  double cl   = iClose(NULL,0,1);
  double op   = iOpen(NULL,0,1);
  double high = iHigh(NULL,0,0); //хай цены
  double low  = iLow(NULL,0,0);
  
  ArraySetAsSeries(ATRm,true);
  
  if (CopyBuffer(ATRy,0,0,100,ATRm)<0) //
   {
      Alert("Ошибка копирования буферов индикатора ATR - номер ошибки:",GetLastError(),"!!");
      return;
   }

 double ATR  = ATRm[1]; //значение дневного АТР вчерашнего дня
 double TP   = ATR/100*TPpr;
 double SL   = ATR/100*SLpr;  // значение от атр 50% 
 double DD   = ATR/100*DDpr;  
 
 double PR   = PositionGetDouble(POSITION_PRICE_OPEN); //цена открытия
 
 double PRTPl = PR+TP; //цена для тейка лонга
 double PRSLl = PR-SL; //цена для стопа лонга
 double PRTPs = PR-TP; // цена для тейка шорта
 double PRSLs = PR+SL; // цена для стопа шорта
 
 Comment (low);
  //----------------------------ПОКУПКИ-------------------------------------------------                 
   if (!PositionSelect(_Symbol))      //если нет открытой позиции
   {
     if (TC == TCtime)               //если время равно 10:01:00 
      {  
       if (cl>op)                 //если открыти 1ой свечи > закрытия 1ой свечи
        {
         trader.Buy(Lots,NULL,cl,PRTPl,PRSLl);     //то вход в лонг                                             
        }
      }       
   }
  //------------------------------ПРОДАЖИ--------------------------------------------------------
 if (!PositionSelect(_Symbol))      //если нет открытой позиции
   {
    if (TC == TCtime)               //если время равно 10:01:00
    {        
       if (cl<op)                 //если закрытие 1ой свечи < открытия 1ой свечи
       {
         trader.Sell(Lots,NULL,cl,PRSLs,PRTPs);     //то вход в шорт                                                
       }
    }       
   }
  
  }
 
sofi563:

как только добавляю значения стопа, перестает открывать сделку. почему? понять не могу. 

trader.Buy(Lots,NULL,cl,PRTPl,PRSLl); если отсюда убрать PRTPl,PRSLl то будет открываться


Посмотрите в журнал "Эксперты" - там наверняка увидите причину.
 
sofi563:

как только добавляю значения стопа, перестает открывать сделку. почему? понять не могу. 

trader.Buy(Lots,NULL,cl,PRTPl,PRSLl); если отсюда убрать PRTPl,PRSLl то будет открываться


вот ваш код с Stop Loss и Take Profit (всё работает)

1

2

Файлы:
1o9.mq5  14 kb