Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
...ага... total передвинул к контролю за позициями - логически МОГЛА произойти ситуация, когда ордеры выставляются ПОСЛЕ подсчёта позиций.
Из кода видно, что на каждом тике идет расчет total=CalculateCurrentOrders(SymbolName);
Эта же ф-ция возвращает количество (только КОЛИЧЕСТВО) открытых ордеров, соответствующих заданным условиям. Причем если есть ордера BUY, то ф-ция вернет их количество, если их нет, то вернет количество ордеров SELL со знаком МИНУС (отрицательное число). А если нет ни тех ни других, то вернется 0.
total расчитывается перед циклом for(i=0;i<total;i++). Как думаете будут ли контролироваться ордера (выполняться цикл), если есть только SELL ордера?
Если пытаетесь контролировать открытые позиции, то лучше использовать такую конструкцию (писал выше):
т.к. в случае с for(i=0;i<total;i++), возможна ситуация когда ордер с порядковой позицией №1 (к примеру) обработан и закрыт, т.е. измениться(уменьшится) кол-во ордеров и ордер с порядковой позицией №2 станет №1, а цикл перейдет к №2 и следовательно ордер выбран и обработан не будет.
И еще в ф-цию int CalculateCurrentOrders(string symbol) передается параметр symbol, но в ней не используется, уберите его он там не нужен.
для подсчёта ордеров по-раздельности я использую CalculateBySellOrders
total=OrdersTotal()-1;
for(i=total;i>=0;i--)
попробовал, но на закрытие ордеров это не повлияло
ордер должен закрываться тогда, когда приходит сигнал на закрытие
//сигнал к закрытию открытой позиции на покупку - когда имея сигнал на ПОКУПКУ, линия возвращается к уровню покупки "-100"
if(iCTek<=iClvlBUY && iCPrev>iClvlBUY)
//сигнал к закрытию открытой позиции на продажу - когда имея сигнал на ПРОДАЖУ, линия возвращается к уровню продажи "100"
if(iCTek>=iClvlSELL && iCPrev<iClvlSELL)
переделал
Логику смотреть, честно говоря, нет никаго желания. Распринтуйте в интересных местах. Думаю, что есть логическая ошибка.
что тогда кроме CLOSE?
так ВСЕ значения (ну разве что кроме OPEN) будут так меняться... все остальные расчитываются от OPEN
что тогда кроме CLOSE?
Просто сравнивать значения на 1-м и 2-м баре. А если сравнивать на 0-м, то иногда появляются темы типа "Сигнала не было, а ордер открылся, почему?". Главное отдавать себе отчет, что и для чего делается.