Нет, с параметрами всё правильно. Проверял сдвиг от 0 и до 99. Все значения с 1 по 99 четко соответствуют показанию на индикаторе, но при значении сдвига 0, данные не соответствуют индикатору. Не могу понять каким образом они берутся и в чем моя ошибка.
Столкнулся вот с какой проблемой. Есть функция которая выставляет отложенный ордера. Но выставляет она их ТОЛЬКО в том случае если ордера по данной цене нет. Однако странным образом происходит повторное выставление ордера по той же цене. Вот функция, которая выставляет ордера.
int fOrderOpenBuy(double PR1, double PTP){
bool chek1=false;
RefreshRates();
double lts=fGetLotsSimple(OP_BUY);
if(lts>0){
if(!IsTradeContextBusy()){
//double PR=Close[1]-(150*Point);double slts=ND(PR1-Point*StopLoss);
if(StopLoss==0)slts=0;
//проверка ордеровint TotalOrders=OrdersTotal();
for (int i=0; i<=TotalOrders; i++){
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
if (PR1==OrderOpenPrice()){chek1=true;}
Print ("Чек "+OrderOpenPrice()+" "+PR1);
}
}
if (chek1==false) { int irv=OrderSend(Symbol(),OP_BUYLIMIT,lts,PR1,Slippage,slts,PTP,NULL,Magic_N,0,CLR_NONE); }
if(irv>0){
PlaySound("ok");
return(irv);
}
else{
PlaySound("timeout");
Print ("Error open BUY. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
staticint lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need open buy. Trade Context Busy");
}
return(-2);
}
}
else{
staticint lt3=0;
if(TimeCurrent()>lt3+20){
lt3=TimeCurrent();
if(lts==-1)Print("Need open buy. No money");
if(lts==-2)Print("Need open buy. Wrong lots size");
}
return(-3);
}
}
Причём принтом выводит одинаковые цены откртыя, но вот строчка if (PR1==OrderOpenPrice()){chek1=true;} выполнятся не хочет. Может кто ни будь ответить почему????
Если речь идёт о рачсйте один раз на бар то я использую
if (b!=Bars){
b=Bars;
}
Соотвественно происходит расчёт тот что в скобках всеголишь один раз за бар...
Спасибо большое.
Мне нужно, что бы инф. выводилась на первом минутном баре и только на нем.
Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.
Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция Printдолжна "отдыхать".
Мне нужно, что бы инф. выводилась на первом минутном баре и только на нем.
Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.
Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция Print должна "отдыхать".
попробуйте использовать флаг.
типа
bool flag=false;
......
if (x1<0)&&(flag==false){Print();flag=true;}
Тогда принт будет выводится ОДИН раз.
А после срабатывания стопа взведите флаг в состояние фальше и принт выполнится ещё раз....
Мне нужно, что бы инф. выводилась на первом минутном баре и только на нем.
Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.
Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция Print должна "отдыхать".
Вы каждый раз добавляете условий на выполнение Print(). :)
Если условия закончились, можно так:
int gi_LastTicket = -1;
bool fPrint_Condition()
{
int li_LastTicket = Функция ищущая последний тикет ордера, закрывшегося по Стопу (ищите у Кима, если нет своей)
if (li_LastTicket != gi_LastTicket) {gi_LastTicket = li_LastTicket; return (true);}
return (false);
}
voidOnTick()
{
if (fPrint_Condition()) Print();
}
С параметрами не ошиблись?
Доброго времени года всем :-)
Столкнулся вот с какой проблемой. Есть функция которая выставляет отложенный ордера. Но выставляет она их ТОЛЬКО в том случае если ордера по данной цене нет. Однако странным образом происходит повторное выставление ордера по той же цене. Вот функция, которая выставляет ордера.
Причём принтом выводит одинаковые цены откртыя, но вот строчка if (PR1==OrderOpenPrice()){chek1=true;} выполнятся не хочет. Может кто ни будь ответить почему????
А то я уже заипался..... :-( цены одинаковые а ордер всё равно открывается.....
Подскажите пожалуйста в чем может быть проблема? Пробовал прикручивать разные индикаторы все работают, но только в тестере!
Всем добрый день!
Подскажите пожалуйста...
Вот фрагмент кода в котором есть два условия при исполнении которых функция Print печатает сообщение.
Проблема.
Фукнция Print печатает сообщение НА КАЖДОМ ТИКЕ , мне нужно что бы она напечатала его только на первом тике, а на остальных - отдыхала.
Подскажите пожалуйста - как ее остановить после первого тика.
Спасибо.
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_SELL)
X1 = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_SELL)
if(X1 < 0)
Print(" LOW ", X1 );
Всем добрый день!
Подскажите пожалуйста...
Вот фрагмент кода в котором есть два условия при исполнении которых функция Print печатает сообщение.
Проблема.
Фукнция Print печатает сообщение НА КАЖДОМ ТИКЕ , мне нужно что бы она напечатала его только на первом тике, а на остальных - отдыхала.
Подскажите пожалуйста - как ее остановить после первого тика.
Спасибо.
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_SELL)
X1 = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_SELL)
if(X1 < 0)
Print(" LOW ", X1 );
Если речь идёт о рачсйте один раз на бар то я использую
if (b!=Bars){
b=Bars;
}
Соотвественно происходит расчёт тот что в скобках всеголишь один раз за бар...
Если речь идёт о рачсйте один раз на бар то я использую
if (b!=Bars){
b=Bars;
}
Соотвественно происходит расчёт тот что в скобках всеголишь один раз за бар...
Спасибо большое.
Мне нужно, что бы инф. выводилась на первом минутном баре и только на нем.
Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.
Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция Print должна "отдыхать".
Спасибо большое.
Мне нужно, что бы инф. выводилась на первом минутном баре и только на нем.
Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.
Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция Print должна "отдыхать".
попробуйте использовать флаг.
типа
bool flag=false;
......
if (x1<0)&&(flag==false){Print();flag=true;}
Тогда принт будет выводится ОДИН раз.
А после срабатывания стопа взведите флаг в состояние фальше и принт выполнится ещё раз....
Спасибо большое.
Мне нужно, что бы инф. выводилась на первом минутном баре и только на нем.
Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.
Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция Print должна "отдыхать".
Если условия закончились, можно так: