Вместо закрытия позы идет открытие - страница 2

 
Stanislav Korotky:
Похоже, что вы цитируете справку, а сами её не читаете. Для закрытия позиции по номеру на хеджевом счете используется метод PositionCloseByTicket, а у вас в коде - PositionClose(pos.Identifier()) - здесь даже тип параметра не совпадает - должна быть строка с именем символа.
В Справке опечатка, загляните в код класса CTrade там только два метода с перезагрузкой
   bool              PositionClose(const string symbol,const ulong deviation=ULONG_MAX);
   bool              PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX);
 
stark2004:



 Успешное нажатие на педаль тормоза не всегда означает успешное торможение.

Необходимо убедится , что ВЫ не врубились в препятсвие , проверкой автомобиля не целостность .




 

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

 Логика такая , что при вызове

я ожидаю закрытие позы.

V Может просто опишите алгоритм который пытаетесь запрограммировать, проще будет вам помочь.
 

 Сергей привет.


Алгоритм простой.

На каждом баре :

Делаем  БАЙ с маджиком 1 лотом 0,1

Если профит  позы (с маджиком 1 ) меньше 10 , то делаем БАЙ с маджиком 2 лот 0,1

Если профит  позы (с маджиком 2 ) меньше 10 , то делаем БАЙ с маджиком 3 лот 0,1

Если профит позы (с маджиком 1 )+(с маджиком 2 )+ (с маджиком 3 ) > 10 , то закрыть все позы и забрать прибыль

Все.

 
samsuser3:

 Сергей привет.


Алгоритм простой.

На каждом баре :

Делаем  БАЙ с маджиком 1 лотом 0,1

Если профит  позы (с маджиком 1 ) меньше 10 , то делаем БАЙ с маджиком 2 лот 0,1

Если профит  позы (с маджиком 2 ) меньше 10 , то делаем БАЙ с маджиком 3 лот 0,1

Если профит позы (с маджиком 1 )+(с маджиком 2 )+ (с маджиком 3 ) > 10 , то закрыть все позы и забрать прибыль

Все.

А что делать если поза и с 3 мейджиком продолжает идти в минус? Опять же вопрос на каком типе счета неттинг или с хеджем, на неттинге все сделки сливаются в одну позицию, на хеджевом открываются также как в МТ4 каждая новая сделка порождает новую позицию
 

 В этом случае эксперт имеет такой же блок  на СЕЛЛ , но я не стал загромождать алгоритм приводимый здесь.

Плюс - часть параметров будет оптимизироваться.

Готовый советник для МТ4 я оправил Вам в личку . Погоняйте его на МТ4 .

 

В МТ4 педаль газа и тормоза работают в соответствии со  здравым смыслом .

Когда в нем закрываешь позу - она закрывается .

В МТ5 вместо тормоза - еще один газ :)  , но в остальном он мне очень нравится .

По характеру кривой баланса и эквити видно ,что группа отдельных ордеров на БАЙ и СЕЛЛ  открываемых навстречу друг другу позволяет сближать

между собой  эти линии  или перекручивать ,  как косичку .

  Путем оптимизации обученный эксперт может несколько дней работать также , как на участке оптимизации .

Что бы не сойти с ума в МТ5 этого  лучше не делать .

Хотя , может быть кто-то уже стал гением :)

 

В МТ4:

Если в качестве цели оптимизации брать минимальную просадку депо

то  оптимизация на 2015 выглядит так


На новых данных  2016.01.06 - 2016.06.06 , которые где то  справа на кривой баланса  и до конца

Общий отчет   на интервале  оптимизации + новые данные

В общем то работоспособная идея ( по крайней мере на тестере   ) и адекватный инструмент МТ4

 

В МТ5:


В общем то работоспособная идея ( по крайней мере на тестере   ) и ...

 
 void PositionClose(int Magic, double volume )
  { 
  
  MqlTick last_tick={0}; 
  //ENUM_POSITION_TYPE   pos_type=NULL;       // Тип позиции
     MqlTradeRequest request={0}; 
     CTrade trade;
      CPositionInfo pos;
        MqlTradeResult result={0}; 
   int total=PositionsTotal();
   for(int i=0; i<total; i++)
     {
      if(!pos.SelectByIndex(i))continue;
      if(pos.Magic()!=Magic)continue;
      if(pos.Symbol()!=_Symbol)continue;
     // if(pos.Profit()>=Profit)
       // {
   //   if (  pos.PositionType == POSITION_TYPE_BUY ) 
   //      request.type=ORDER_TYPE_BUY;
   //   if ( request.PositionType == POSITION_TYPE_SELL ) 
   //      pos.type=ORDER_TYPE_SELL;
  //  PositionGetInteger() 
     GetPositionProperties();
     
   if(pos_type==0)
    { request.price  = Bid;
     request.type=ORDER_TYPE_SELL;  }
    if(pos_type==1)
     { request.price  = Ask;
      request.type=ORDER_TYPE_BUY; }
     // request.type=ORDER_TYPE_BUY;
   //     request.action=TRADE_ACTION_DEAL;            // установка   ордера       
       //  trade.PositionClose(pos.Identifier());
        request.magic=Magic;  
         request.volume=volume; 
           request.price= last_tick.bid;
           
          // /---- Инициализация структуры торгового запроса MqlTradeRequest для закрывания BUY позиции
  // request.type   = ORDER_TYPE_SELL;
    
           
       //   OrderSend(request,result); 
          
          trade.PositionClose(pos.Identifier());
          
 // MqlTradeRequest request={0}; 
 //  request.action=TRADE_ACTION_CLOSE_BY;          
         
        // trade.PositionClose(PositionGetSymbol(i));
       // }
     } 
     

Пытаюсь закрыть позу в МТ5 .

 

 

 
//+------------------------------------------------------------------+
//|                                        PositionCloseByTicket.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
CTrade trade;
//---
input long ticket_position_by_close=0;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   for(int i=0;i<PositionsTotal();i++)
     {
      ResetLastError();
      if(PositionGetSymbol(i)==NULL)
        {
         Print("Error #",GetLastError());
         return;
        }
      long POSITION_ticket=PositionGetInteger(POSITION_TICKET);
      if(POSITION_ticket==ticket_position_by_close)
        {
         trade.PositionClose(ticket_position_by_close);
         return;
        }
     }
  }
//+------------------------------------------------------------------+
Файлы:
Причина обращения: