¿Código de error "0"? - página 2

 
DomGilberto:
Oh, lo siento - Ya no estoy recibiendo ningún error de lo que sea. Sólo recibo órdenes de compra y no órdenes de venta...

¡Es en relación con mi hilo anterior con respecto a los cruces de MA - Todavía no lo entiendo! ¡Pero no quiero dar cuerda a nadie y golpear un caballo muerto mientras la gente me está dando la respuesta (aunque no entiendo la respuesta lol)! ¡Gracias RaptorUK por su ayuda!

No puedo hablar por nadie más, no me estoy enrollando....

Si usted está recibiendo ningún error y no hay orden de venta colocado entonces OpenOrdersThisPair(Symbol()) no es igual a 0 , ¿qué tipo es esa función ? es un int o un doble ? o tal vez un bool ?

 
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| Check to see if any order open on this currency pair                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   

int OpenOrdersThisPair(string pair)
{
   int total=0;
      for(int i=OrdersTotal()-1; i >= 0; i--)
         {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==pair) total++;
         }
         return (total);
} 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

   double ticksize = MarketInfo(Symbol(), MODE_TICKSIZE);
   if (ticksize == 0.00001 || ticksize == 0.001) // if you set this to 0 it WONT throw an order out straight away.
   pips = ticksize*10;
   else pips = ticksize;  
   

   return(0);
  }
En realidad no puedo entender cuál es el problema. He escrito las declaraciones MA si tantas maneras mi conocimiento limitado me está diciendo (claramente limitado como no funciona en el lado corto...)

Creo que es porque las órdenes no son simplemente ser colocado en donde la cruz de las medias móviles tienen lugar, pero en un punto diferente.
 
//+----------------------------------------------------------------------------------------------------------------------------------------+   
//| Function that checks for an MA Cross                                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   
  

void CheckForMaTradeLong()
{
   
   TriggerBarTime = Time[1];
   
   for (int i=0; i < Bars; i++)
   {
   double i1  = iMA(NULL,60,3,0,1,0,i); 
   double i2  = iMA(NULL,60,5,0,1,0,i);
   double i3  = iMA(NULL,60,8,0,1,0,i);
   double i4  = iMA(NULL,60,10,0,1,0,i);  
   double i5  = iMA(NULL,60,12,0,1,0,i);
   double i6  = iMA(NULL,60,15,0,1,0,i);  
   double i7  = iMA(NULL,60,30,0,1,0,i);
   double i8  = iMA(NULL,60,35,0,1,0,i);
   double i9  = iMA(NULL,60,40,0,1,0,i);
   double i10 = iMA(NULL,60,45,0,1,0,i);
   double i11 = iMA(NULL,60,50,0,1,0,i);
   double i12 = iMA(NULL,60,60,0,1,0,i); 
   double ema21 = iMA(NULL,60,21,0,1,0,i);   

   double TriggerBarTime = (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12); // this needs to just tell me where all the MA's fan up and nothing more...
   if(i1 > i12)
   if (TriggerBarTime == true)
       if(Low[1]<ema21 && i12<Close[1]) OrderEntry(0);
         if(Close[1]<i12) DeleteOrder(0);   
   
   break;
   }
   return(i-1);
   }

¡Sé que este es el problema! Sé que he preguntado antes sobre esto en otro tema, pero agradecería mucho la respuesta a esta pregunta (y sí, sé que el código es descuidado, es que he pasado mucho tiempo picando, compilando y ejecutando la estrategia para ver de primera mano cómo se comunican entre sí. Por no hablar de la forma innecesaria en que lo he escrito también... pero ignorando eso...)

P.1) Con respecto a la línea "doble triggerbartime" y la > que sección.... Lo único que quiero entender es cómo le digo a esta función que averigüe cuando todas las medias móviles son mayores que la anterior media móvil comparada, y luego olvidarme de que sigan en el orden correcto... En lugar de eso, todo lo que necesito para asegurarme es que el PRECIO DE CIERRE permanezca por encima de la "i12" (60 EMA) - si lo hace, entonces puede seguir adelante con las otras declaraciones IF y lanzar una orden larga a través de "OrderEntry(0)" - Si no lo hace, entonces necesita mirar la línea larga (i1>i2 && i2>i3...) y esperar a que esto sea cierto de nuevo antes de considerar las siguientes líneas...

Sé que la respuesta está mirando a la derecha en mí, sólo se está convirtiendo en un poco frustrante y realmente apreciaría este poco de nugget.... ¡Gracias!

 
  1. Su mensaje
    double TriggerBarTime = (i1>i2  && i2>i3   && i3>i4 && i4>i5 && 
                             i5>i6  && i6>i7   && i7>i8 && i8>i9 && 
                             i9>i10 && i10>i11 && i11>i12);
       if (TriggerBarTime == true)
    ¿Qué tipo de datos debería ser TrgggerBarTime?
    double  TriggerBarTime = boolean;
       if (double == true)

  2. ¿Por qué está buscando barras antiguas para TriggerBarTime y la última barra para orderEntry?
  3. Arregla tu sangría
    Su mensaje
       if(i1 > i12)
       if (TriggerBarTime == true)
           if(Low[1]<ema21 && i12<Close[1]) OrderEntry(0);
             if(Close[1]<i12) DeleteOrder(0);   
    Con una sangría adecuada. ¿Es esto realmente lo que quieres decir?
    if(i1 > i12 && TriggerBarTime && Low[1]<ema21 && i12<Close[1]){
        OrderEntry(0);
    }
    if(Close[1]<i12){
        DeleteOrder(0);
    }
    
 
//TriggerBarTime works in conjunction with:

   int iTBT= iBarShift(NULL,60, TriggerBarTime, true),
        iHH= iHighest(NULL,60, MODE_HIGH, iTBT + 1, 0); 
            double buyPrice = High[iHH]+PadAmount*pips;

//I then use this "buyPrice" in conjunction with OrderSend for where the price of the entry order is...

Estoy queriendo saber dónde se abren todas las MA, pero NO es necesario que sean verdaderas TODO el tiempo... Sólo quiero que eso sea cierto antes que cualquier otra cosa... Si esto es cierto, todo lo que tiene que ocurrir desde este precio es que NINGUNA barra cierre por debajo de la EMA 60 (para un largo) para que cualquier posición larga sea expulsada...

Estoy usando TriggerBarTime para encontrar el punto más alto desde donde se apilaron todas las medias móviles en el orden correcto y la barra que luego procede en tocar la 21 EMA...

Así que aunque me has enderezado la sangría, eso hace más o menos lo que yo había escrito antes (¿a menos que me esté perdiendo algo?) Probs mi culpa no lo expliqué correctamente.

(ah sí - Sé que debería ser bool que fue un error - Yo estaba simplemente jugando y se olvidó de cambiar de nuevo).

 
double TriggerBarTime = (i1>i2 .. 
es verdadero o falso 0 o 1 nada más
 int iTBT= iBarShift(NULL,60, TriggerBarTime, true),
El tercer argumento de iBarShift debe ser un datetime. iBarShift(0) o (1) será SIEMPRE Bars-1.
 
datetime          TriggerBarTime;
Tengo esto en la sección global...

No entiendo tu post anterior... ^

¿Es posible sugerir cómo escribo la línea If en relación a mi post anterior al tuyo?
 
DomGilberto: Tengo esto en la sección global...
Y lo has ocultado con la declaración local.
 
Lo siento, pero eso, de nuevo, no tiene sentido para mí...
 
DomGilberto: Lo siento, pero eso, de nuevo, no tiene sentido para mí...
int myVariable = 0;
int start(){
  double myVariable = 1;
  Print(myVariable); // Outputs 1.0
  myVariable++;
  myFunction(myVariable);
}
void myFunction(double v){
  Print(myVariable," ",v); // Outputs 0 2.0
}