Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 959

 
rapid_minus:

¡Hola!

Estaba buscando un error en el código de mi Asesor Experto y me encontré con una confusión - cuando la prueba del operador if() en la función OnTick() funciona sólo una vez, no funciona en los siguientes ticks y barras.

¿Por qué? ¿Qué es lo que falla en el fragmento de código adjunto?

Bueno, mira dónde se reasignan las variables. En primer lugar, encontrar donde ClsS = falso; y si se ejecuta.
 
AlexeyVik:
Bueno, busca dónde se reasignan las variables. En primer lugar, encontrar donde ClsS = false; y si se ejecuta.
ClsS = false en las variables globales. Aha! Lo tengo - Voy a cambiar falso a verdadero. Vamos a comprobar...
 

¡TRABAJANDO! ¡GRACIAS!

Iré a comprobarlo más a fondo. Gracias de nuevo.

 
De nuevo, por favor, ayuda... Comprobando los criterios de apertura/cierre se ve que aparecen según las condiciones dadas, pero cuando voy más allá, la alerta escribe que no existen. ¿Hay algo que se me escapa aquí también?
//----------------------------------------------------------------------------------- 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:

m¿Cómo lo hago de forma programada en el indicador?

No sé cómo preguntar en el ayudante.

Tal vez alguien pueda darme un enlace específico o palabras clave.

Ver propiedadesChartGetInteger() y CHART_WINDOW_IS_VISIBLE

 

Buenos días a todos! Ahora aquí hay una pregunta de fuera de la caja..... Presentación de la función de inicio. Pregunta, por qué en cada nueva barra se duplica la variable N. En cada nueva barra, mientras que debería hacerlo SÓLO cuando llega una nueva señal...

¿Qué tienen que decir los desarrolladores al respecto?

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);    
     }
 

¡Hola!

¿Quizá alguien se ha encontrado ya con este problema y conoce la causa y la solución?

El asesor funciona claramente en el probador, y cuando se activa en las cotizaciones actuales, la posición abierta por el criterio se cierra en el siguiente tick de pérdida (el tick de más no tiene efecto). La impresión completa es la de una interferencia externa. ¿Cuál puede ser el problema aquí? Gracias.

 
rapid_minus:

¡Hola!

¿Quizá alguien se ha encontrado ya con este problema y conoce la causa y la solución?

El asesor funciona claramente en el probador, y cuando se activa en las cotizaciones actuales, la posición abierta por el criterio se cierra en el siguiente tick de pérdida (el tick de más no tiene efecto). La impresión completa es la de una interferencia externa. ¿Cuál puede ser el problema aquí? Gracias.

Sin un código, sólo los psíquicos pueden ayudar. Hay una rama de ellos en alguna parte. Deberíamos hacer una pregunta allí.
 
Bueno, ciertamente si hay una intervención externa, sólo a un psíquico.
 
Vinin:
Sin el código sólo los psíquicos pueden ayudar. Había una rama de ellos en alguna parte. Deberías hacer una pregunta allí

¡Una "broma de humor" siempre es un plus!

El código es demasiado grande para publicarlo aquí en su totalidad. Pero fue escrito usando el Asesor Experto de Sleptsov como plantilla. Sólo he insertado mis propios indicadores y condiciones para los criterios de negociación. Creo que la razón se encuentra en algún tipo de configuración de código preliminar, pero son absolutamente idénticos al original.