Программисты, подскажите. Как зафиксировать событие "Позиция закрыта по SL"? - страница 3

 

Вот функция :

bool isCloseLastPosByStop(int m) {
bool f=false; 
 for (int i=0; i<OrdersHistoryTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
         if (OrderMagicNumber()==m) {
            if(OrderCloseTime()==TimeCurrent()){
              if(OrderStopLoss()==OrderClosePrice()){
            f=true;
            }
        }   
     }
    }
   }  
  }
return(f);
}     
 
alsu:
Вообще, конечно, вариант, по которому закрыта позиция, мог бы быть и переменной ордера, хранящейся на сервере. Но это вопрос к разработчикам.

Вот именно.
Одна маленькая переменная избавила бы от необходимости извращений типа "мартышкин труд".

При работе оложенными особых проблем нет, проблема встает ребром когда пытаемся сделать советник с непосредственным открытием позиций.
Намного ведь эффективнее.
Но!
Не подстраховываться установкой безубытка нельзя, профитность снижается, т.к. не придуман еще анализатор, который бы закрывал абсолютно точно,
пока он сработает, с немаленького профита можно в приличный минус влететь. Особенно на новостях.
А если фиксируем б/у, то стоплосю ведь пофиг что сигнал еще разрешающий, он закрывает. Тут же, если закрытие произошло под разрешающий сигнал,
открывается новая позиция, которая уже с большой степенью вероятности будет убыточной, т.е. фиксация безубытка опять же идет во вред.

Я то решаю эту проблему, но решение слишком громоздко.
Если идет торговля одним ордером, то по поднятому флагу+разрешающий сигнал+нет открытых позиций = запрещается открытие позиции, следующим выставляется отложенный.
Потом опять проверка, если нет открытых позиций и нет разрешающего сигнала, то сбрасывается флаг и вновь по сигналу разрешается открывать позицию .
В случае если позиция не одна, то все то же самое, но сличаем количество оставшихся в живых с тем что было до. Еще более громоздко.

 

1. Ведем список открытых позиций:

- при открытии позиции программой, добавляем ее тикет в список;

- при закрытии позиции программой, удаляем ее тикет из списка.

2. Периодически просматриваем фактически открытые позиции,- если в списке позиция зарегистрирована, а фактически ее нет, то она закрыта сервером по причине:

- достижения уровня Take Profit, если оный уровень был задан и цена закрытия близка к нему;

- достижения уровня Stop Loss, если уровень Take Profit не был задан, или если цена закрытия далека от него;

- прихода дядя Коли - не рассматриваю по понятной причине;

- происков врагов - во всех прочих случаях.

3. Если тактика подразумевает возможность рукоблудия, то пользуемся для этого скриптами, учитывающими пп.1-2.

Причина обращения: