Помогите чайнику, господа программисты :)

 
Пытаюсь разобраться в самих азах.
Нужна программка для нахождения оптимального параметра мувинга для определенного таймфрейма и инструмента методом тестирования на истории.
Немного видоизменила под себя советник МЕТАКВОТСА. То есть закрытие происходит исключительно по S\L или T\P. Все нормально работает.
Теперь пытаюсь написать код таким образом, чтобы открытие происходило при первом касании мувинга и цены не дожидаясь закрытия бара, то есть проверка должна происходить на каждом тике, а не на первом тике нового бара, как в совенике Метаквотса. buy, если MA > Сlose на предыдущем баре и Аск=МА, sell - соответственно MA<Close[1] и Бид=МА. Все компилируется без ошибок, тестер даже чтото пытается тестировать, но позиции не открываются. Ребят, может что-то не учла, или какой-то момент не правильно понимаю? Вот часть кода:

void CheckForOpen() { double ma; int res; //проверка каждого тика для открытия позиции if(Volume[0]>0) //вычисление скользящего среднего ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //открытие позиции на продажу if(MarketInfo(Symbol(),MODE_BID)==ma && Close[1]>ma) { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red); return; } else //открытие позиции на покупку if(MarketInfo(Symbol(),MODE_BID)==ma && Close[1]<ma) { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue); return; } }


С уважением, Aikon
 
для продажи res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"", MAGICMA,0,Red);
для покупки res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"", MAGICMA,0,Blue);
остальное пока не проверял)))) -тк уже пьяный)))
 
George-on-Don:
для продажи res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"", MAGICMA,0,Red);
для покупки res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"", MAGICMA,0,Blue);
остальное пока не проверял))))
Ошибку поняла, спасибо, но это всего лишь ошибка, касающаяся правильного выставления стопордеров... Очень жду еще помощи

George-on-Don, неужто уже день защитника отечества празднуете? ;-) Тогда заранее Вас с праздником!
 
))у меня с вашими условниями тестируется даже эквити выдал)) вон какую))) - спсибо за поздравления)))
Файлы:
 
Явная ошибка в том, что нельзя вот так вот сравнивать цены:
MarketInfo(Symbol(),MODE_BID)==ma

Если нужно сравнивать пересечение мувингом текущей цены, то лучше сделать так:
if( (Close[0]>=ma && Close[1]<=ma) || // пересечение мувингом цены снизу вверх (Close[0]<=ma && Close[1]>=ma) ) // пересечение мувингом цены cверху вниз { // что то делаем }


Надо искать касания/пересечения на основе как минимум двух точек, а лучше еще сделать контрольную проверку за пару баров назад, чтобы удостовериться в реальности пересечения. Ведь иногда на флете(рынок идет горизонтально) мувинги практически ложаться на цену, выдавая множество ошибочных сигналов.
 
Renat:
Явная ошибка в том, что нельзя вот так вот сравнивать цены:
MarketInfo(Symbol(),MODE_BID)==ma

Если нужно сравнивать пересечение мувингом текущей цены, то лучше сделать так:
if( (Close[0]>=ma && Close[1]<=ma) || // пересечение мувингом цены снизу вверх (Close[0]<=ma && Close[1]>=ma) ) // пересечение мувингом цены cверху вниз { // что то делаем }


Надо искать касания/пересечения на основе как минимум двух точек, а лучше еще сделать контрольную проверку за пару баров назад, чтобы удостовериться в реальности пересечения. Ведь иногда на флете(рынок идет горизонтально) мувинги практически ложаться на цену, выдавая множество ошибочных сигналов.
Спасибо, Renat, все ясно :) Все получилось. Именно в этом и была загвоздка. Только, кажется, Вы немного описались в комментариях- пересечение цены снизу вверх и сверху вниз поменять местами нужно.
Совет по поводу проверки касания за пару баров назад учла :)
 
George-on-Don:
))у меня с вашими условниями тестируется даже эквити выдал)) вон какую))) - спсибо за поздравления)))
Довольно странно, что у вас получилось...Никак не могу понять как так вышло. У меня до изменения кода по совету Renata после тестирования депозит оставалсся прежним, так как позиции просто не открывались.

Думаю, тему можно закрыть. Спасибо, ребят, за помощь
 
2 Renat - а что close[0]- это последний тик?
 
Aikon:
George-on-Don:
))у меня с вашими условниями тестируется даже эквити выдал)) вон какую))) - спсибо за поздравления)))
Довольно странно, что у вас получилось...Никак не могу понять как так вышло. У меня до изменения кода по совету Renata после тестирования депозит оставалсся прежним, так как позиции просто не открывались.

Думаю, тему можно закрыть. Спасибо, ребят, за помощь
) на тесте-истории у меня работает- на реальных котировках пока не пробовал))
 
George-on-Don:
2 Renat - а что close[0]- это последний тик?
а какие есть ещё варианты? =)
 
komposter:
George-on-Don:
2 Renat - а что close[0]- это последний тик?
а какие есть ещё варианты? =)
)) еще не придумал другие))
Причина обращения: