ПОМОГИТЕ! для открытия сделки я использую функцию для определения нового бара
void Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=Time[0]; // Время текущего бара
New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
}
затем в функции OnTick проверяю на наличие нового бара:
Fun_New_Bar(); // Обращение к ф-ии
if (New_Bar==false) // Если бар не новый..
return; // ..то уходим
if (New_Bar==true)
{
открываем сделку на покупку или продажу
}
за пределами оператора if(New_Bar==true)
{
}
я пишу условия модификации открытого ордера и частичного его закрытия:
if (Ask 0 && order_open==true)
{
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
{
bool order_mod=OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), TP, 0);
bool order_close=OrderClose(OrderTicket(), 0.5*Lots, Ask, Slippage, Black);
order_open=false;
}
}
}
}
все вроде бы замечательно и компилятор не ругается, но есть маленькое НО: сделка у меня открывается на новой свече при соблюдении условий, которые там прописаны, и самое главное - модификация ордера при достижении центральной линии TMA с частичным закрытием ордера осуществляется так же на новой свече.
P.S. прикладываю картинку из тестора для наглядности. Синим отмечен правильная модификация или закрытие сделки, красным - которые были сделаны программой по факту.
Добавлено: 24-05-2014 21:26:17
выделил код той части советника, который не хочет корректно работать. (см вложенные файлы)
