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

 
rapid_minus:

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

Искал ошибку в коде своего эксперта и столкнулся с непоняткой - при тестировании оператор if() в функции  OnTick() срабатывает только один раз, на следующих тиках и барах не срабатывает.

Почему? Что у меня не так в прилагаемом куске кода?

Ну ищи где переназначаются переменные. В первую очередь найди где ClsS = false; и выполняется-ли это.
 
AlexeyVik:
Ну ищи где переназначаются переменные. В первую очередь найди где ClsS = false; и выполняется-ли это.
ClsS = false в глобальных переменных. Ага! Понял - я же меняю false на true. Проверим...
 

РАБОТАЕТ! СПАСИБО!

Пойду проверять дальше. Еще раз спасибо. 

 
Опять прошу помощи... Проверка критериев открытия/закрытия показывает их появление по заданным условиям, но когда иду дальше, алерт пишет, что их нет. Здесь тоже что-то упускаю?:
//----------------------------------------------------------------------------------- 8 -- Открытие ордеров

    while (Ticket==0)                                            // Цикл открытия ордеров
     {
      if (OpnB != true || OpnS != true)
         {
          Alert("Отсутствуют критерии открытия позиций");
          return;                                            // Выход из OnTick()
         }
      if (Total==0) Alert("открытых ордеров нет"); 

      if (Total==0 && OpnB == true)                         // Если открытых ордеров нет и есть критерий открытия БАЙ...
       {

        SL = Bid - New_Stop(StopLoss)*Point;                // СЛ открытия
        TP = Bid + New_Stop(TakeProfit)*Point;              // ТП открытия
        Alert("Попытка открыть БАЙ. Ожидание ответа...");
        Ticket=OrderSend(Symb,OP_BUY,Lots,Ask,2,SL,TP,Blue); // Открытие БАЙ
        if (Ticket>0)                                       // Если получилось...
         {
          Alert("Открыт ордер БАЙ №",Ticket);
        break;                                              // Выход из while
         }
 
gince:

 

 

мKак сделать программно в индикаторе ? 

в помощнике не знаю как спрашивать. 

МОжет кто конкретную сылку сюда кинет или ключевые слова. 

 

Посмотри Свойства графиков ChartGetInteger() и CHART_WINDOW_IS_VISIBLE

 

Всем доброго времени суток! А вот теперь вопрос из ряда вон выходящий..... Представляю функцию старт. Вопрос, почему при каждом новом баре переменная N увеличивается в два раза. При каждом новом баре, хотя должна делать это ТОЛЬКО при приходе нового сигнала???

Что скажут на это разработчики???

int start()
 { 
  int i,limit,K;
  int counted_bars=IndicatorCounted();

//  double R,P,N,Zscore,Nprof,Nloose;
//limit=Bars-100;

if (b!=Bars){
b=Bars;
//Sleep(3000);

double ldt_BeginDay = iTime (NULL, PERIOD_D1,20); 
double limit1 = iBarShift (NULL, 0, ldt_BeginDay);

   if(counted_bars<1) limit=limit1-counted_bars;
   else limit=limit1;

 for(i=limit; i>=1; i--)   
      {
       double Profit=(iCustom(NULL, 0, "TDSEQUENTA v2015",5,8,12,0,i)); 
       double CurSignal=(iCustom(NULL, 0, "TDSEQUENTA v2015",5,8,12,6,i)); 
if (CurSignal!=0){      
   /*   
if (curDay!=TimeDay(Time[i])) {
curDay=TimeDay(Time[i]);
double AAA=ProfitFactor;
}*/
      
   
       if ((Profit>0)&&(CurSignal!=0))  {Nprof=Nprof+1;
       if (LastProfit<=0) R=R+1;
                                                      SredP1=SredP1+Profit;
                                                      GrosProf=GrosProf+Profit;
                                                     } else Nprof=Nprof;
                                                     
       if ((Profit<0)&&(CurSignal!=0))  { Nloose=Nloose+1;
       if (LastProfit>=0) R=R+1;
                                                      SredL1=SredL1+(Profit*-1);                                                    
                                                      GrosLoose=GrosLoose+(Profit*-1);
                                                     } Nloose=Nloose;
      if (Nloose>0)SredL=SredL1/Nloose;
      if (Nprof>0) SredP=SredP1/Nprof;
      
      // if (Profit>0) Sred=Sred+Profit; else Sred=Sred+(Profit*-1);                                                                                                                                                    
       N=Nprof+Nloose;
       P=2*Nprof*Nloose;
     // if (Body!=LastBody)N=N+1;   
    //   if (CurSignal!=0)K=K+1;
       
      // if (CumDel!=0)Volum=AD/CumDel;
       if (((Nprof+Nloose)>5)&&(SredL!=0)) MO=(1+(SredP/SredL))*((Nprof/(Nprof+Nloose))-1); //MO
      //////////стандартное отклонение//////////
      if ((N>0)&&(LastProfit!=Profit))Sred1=Sred1+((Profit-(Sred/N))*(Profit-(Sred/N)));
      if ((N>2)&&(LastProfit!=Profit)) Sred2=sqrt(Sred1/(N-1));
      if ((Sred2>0)) Sharp=MO/Sred2;
       
       
       if (GrosLoose>0) ProfitFactor=GrosProf/(GrosLoose); //ProfitFactor
       
       if ((N>2)&&(P>5)) Zscore=(N*(R-0.5)-P)/sqrt((P*(P-N))/(N-1)); // Zscore
       
      if ((SredL>0)&&(SredP>0)&&(P>5))  Kelli=((1-(Nprof/N))/(SredP/SredL))-(Nprof/N);
    //Buffer0[i+1]=ProfitFactor;
    }
    
  //  Buffer1[i]=Kelli-LastKelli;
    //Buffer2[i]=Zscore-LastZscore;
     Buffer2[i]=N;
      // if ((Profit1>0)) Buffer3[i]=1; else Buffer3[i]=0;
  //      if ((Profit1<0)) Buffer5[i]=1; else Buffer5[i]=0;
    // Buffer4[i]=Sharp;
        //Buffer5[i]=HC;
  //      Buffer6[i]=LC;
  
  
  /*
  if (Buffer2[i]>0){
                     if (Profit>0.000){
                                 if (CurSignal>0) Buffer3[i]=1;
                                 if (CurSignal<0) Buffer3[i]=-1;
                                   }
                     if (Profit<0.000){
                                 if (CurSignal>0) Buffer3[i]=-1;
                                 if (CurSignal<0) Buffer3[i]=1;
                                   }
                   } 
  if (Buffer2[i]<0){
                     if (Profit>0.000){
                                 if (CurSignal>0) Buffer3[i]=-1;
                                 if (CurSignal<0) Buffer3[i]=1;
                                   }
                     if (Profit<0.000){
                                 if (CurSignal>0) Buffer3[i]=1;
                                 if (CurSignal<0) Buffer3[i]=-1;
                                   }
                   }*/
 /*
  
        LastPF=ProfitFactor;
        LastMO=MO;
        LastZscore=Zscore;
        LastSTD=STD;
        LastKelli=Kelli;
        LastSharp=Sharp;
        LastVolume=Volum;
        LastProfit=Profit;
        LastPF=ProfitFactor;*/
       // Zscore=0;
        
        } 
    
     }
 return(0);    
     }
 

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

Может кто-то уже сталкивался с такой проблемой и знает причину и способ решения?

Советник четко работает на  тестере, а при включении на текущих котировках открытую по критериям позицию закрывает на следующем УБЫТОЧНОМ тике (Плюсовой тик не влияет). Полное впечатление вмешательства извне.       В чем тут может быть дело?  Спасибо.

 
rapid_minus:

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

Может кто-то уже сталкивался с такой проблемой и знает причину и способ решения?

Советник четко работает на  тестере, а при включении на текущих котировках открытую по критериям позицию закрывает на следующем УБЫТОЧНОМ тике (Плюсовой тик не влияет). Полное впечатление вмешательства извне.       В чем тут может быть дело?  Спасибо.

Без кода только экстрасенсы помогут. Была где-то их ветка. Надо там вопрос задать
 
Ну безусловно, если вмешательство из вне, то только к экстрасенсам.
 
Vinin:
Без кода только экстрасенсы помогут. Была где-то их ветка. Надо там вопрос задать

"Шутка юмора" всегда в плюс! 

Код великоват, чтобы его полностью здесь выкладывать. Но написан он, используя в качестве шаблона готовый советник Слепцова. Вставил только сваи индикаторы и свои условия для торговых критериев. Я думаю, что причина все же в каких-то предварительных настройках кода, но они у меня полностью идентичны оригиналу.

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