не закрываются ордеры в эксперте - страница 2

 
po_saa:

...ага... total передвинул к контролю за позициями - логически МОГЛА произойти ситуация, когда ордеры выставляются ПОСЛЕ подсчёта позиций.

Из кода видно, что на каждом тике идет расчет total=CalculateCurrentOrders(SymbolName);

Эта же ф-ция возвращает количество (только КОЛИЧЕСТВО) открытых ордеров, соответствующих заданным условиям. Причем если есть ордера BUY, то ф-ция вернет их количество, если их нет, то вернет количество ордеров SELL со знаком МИНУС (отрицательное число). А если нет ни тех ни других, то вернется 0.

total расчитывается перед циклом for(i=0;i<total;i++). Как думаете будут ли контролироваться ордера (выполняться цикл), если есть только SELL ордера?

Если пытаетесь контролировать открытые позиции, то лучше использовать такую конструкцию (писал выше):

total=OrdersTotal()-1;
for(i=total;i>=0;i--)
{....}

т.к. в случае с for(i=0;i<total;i++), возможна ситуация когда ордер с порядковой позицией №1 (к примеру) обработан и закрыт, т.е. измениться(уменьшится) кол-во ордеров и ордер с порядковой позицией №2 станет №1, а цикл перейдет к №2 и следовательно ордер выбран и обработан не будет.

И еще в ф-цию int CalculateCurrentOrders(string symbol) передается параметр symbol, но в ней не используется, уберите его он там не нужен.

 
стрелки есть или их нет, а вот сигнал разве здесь должен быть, если я провильно понял идею, то скорее так
 
- CalculateCurrentOrders поменял - его я перетянул с примера... переделал под себя... но видно не додумал до конца - там ЯВНЫЙ глюк  - СПАСИБО (что значит незасахаренный моск :)))
  для подсчёта ордеров по-раздельности я использую CalculateBySellOrders

  total=OrdersTotal()-1;
  for(i=total;i>=0;i--)
попробовал, но на закрытие ордеров это не повлияло
ордер должен закрываться тогда, когда приходит сигнал на закрытие

//сигнал к закрытию открытой позиции на покупку - когда имея сигнал на ПОКУПКУ, линия возвращается к уровню покупки "-100"
if(iCTek<=iClvlBUY && iCPrev>iClvlBUY)

//сигнал к закрытию открытой позиции на продажу - когда имея сигнал на ПРОДАЖУ, линия возвращается к уровню продажи "100"
if(iCTek>=iClvlSELL && iCPrev<iClvlSELL)
 
переделал
 
... а сигнал к покупке или продаже НЕ ДОЛЖЕН являтся сигналом к закрытию противоположной позиции, поскольку противоположная позиция может быть более прибыльной, чем вновь открываемая.
 
po_saa:
переделал

Логику смотреть, честно говоря, нет никаго желания. Распринтуйте в интересных местах. Думаю, что есть логическая ошибка.
 
iCTek=iCCI(SymbolName,period,iCperiod,PRICE_CLOSE,0);
вот еще интересная строка. каждый тик будет возвращаться новое значение, т.к. CLOSE на нулевом баре меняется с каждым тиком.
 
так ВСЕ значения (ну разве что кроме OPEN) будут так меняться... все остальные расчитываются от OPEN
что тогда кроме CLOSE?
 
а вообще я так и не пойму, ПОЧЕМУ НЕ ЗАРЫВАЕТСЯ ОРДЕР?!!
 
po_saa:
так ВСЕ значения (ну разве что кроме OPEN) будут так меняться... все остальные расчитываются от OPEN
что тогда кроме CLOSE?

Просто сравнивать значения на 1-м и 2-м баре. А если сравнивать на 0-м, то иногда появляются темы типа "Сигнала не было, а ордер открылся, почему?". Главное отдавать себе отчет, что и для чего делается.