Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 920

 

Здравствуйте

у меня не активна кнопка "начать на исторических данных"

в чем может быть причина? 

 
mukata:

Здравствуйте

у меня не активна кнопка "начать на исторических данных"

в чем может быть причина? 

Начать что?
 
Vinin:
С параметрами не ошиблись?
Нет, с параметрами всё правильно. Проверял сдвиг от 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{
            static int lt2=0;
               if(TimeCurrent()>lt2+20){
                  lt2=TimeCurrent();
                  Print("Need open buy. Trade Context Busy");
               }            
            return(-2);
         }
      }
      else{
         static int 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;} выполнятся не хочет. Может кто ни будь ответить почему????

 

А то я уже заипался..... :-( цены одинаковые а ордер всё равно открывается.....

 

 
Уважаемые спецы !!!!!Советник не торгует на демо и реале, хотя в тестере все ок!

Подскажите пожалуйста в чем может быть проблема? Пробовал прикручивать разные индикаторы все работают, но только в тестере!

Файлы:
 

Всем добрый день!

Подскажите пожалуйста...

Вот фрагмент кода в котором есть два условия при исполнении которых функция   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 );

 
solnce600:

Всем добрый день!

Подскажите пожалуйста...

Вот фрагмент кода в котором есть два условия при исполнении которых функция   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;

}

 Соотвественно происходит расчёт тот что в скобках всеголишь один раз за бар...

 
nikelodeon:

Если речь идёт о рачсйте один раз на бар то я использую

if (b!=Bars){

b=Bars;

}

 Соотвественно происходит расчёт тот что в скобках всеголишь один раз за бар...

Спасибо большое.

Мне нужно, что бы инф. выводилась на первом минутном  баре и только на нем.

Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.

Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция  Print должна "отдыхать".

 
solnce600:

Спасибо большое.

Мне нужно, что бы инф. выводилась на первом минутном  баре и только на нем.

Тот вариант который Вы предлагаете я пробывал,..... но он выводит информация и на 2 и на 3 и так далее ...ведь второй бар не равен первому,а третий не равен второму и т.д.

Мне нужно вывести инф. один раз на первом баре. И пока не закроется следующий ордер по СТОПУ функция  Print должна "отдыхать".

попробуйте использовать флаг.

типа

bool flag=false;

......

if (x1<0)&&(flag==false){Print();flag=true;} 

Тогда принт будет выводится ОДИН раз.

А после срабатывания стопа взведите флаг в состояние фальше и принт выполнится ещё раз.... 

Причина обращения: