[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 387

 
biragr:

Gracias por su atención, pero no entiendo su pregunta. Puedes establecer la línea para cualquier fecha, y cuando el gráfico la alcance, el EA se activará? O quizás no entiendo algo, si no te importa explicarlo.
Bien, has fijado la línea en el gráfico diario. ¿Y si está en el reloj? ¿La hora de apertura de la orden la fijará la línea o la fijará estrictamente? ¿Es necesario establecer el programa para un mes con líneas o es suficiente un Asesor Experto siguiendo mi enlace?
 
kolyango:

¡Ayuda, por favor! El indicador https://www.mql5.com/ru/code/10067 necesita ser convertido en un simple EA de trabajo (como ejemplo). Principio de acción:

En el par sobre el que se lanzará el EA, tan pronto como el valor sea igual a 0,9570, abra una orden de mercado para vender 0,1 lote con un número mayúsculo (para que los EAs en diferentes ventanas no confundan las órdenes), Stop-Loss 100p, Take-Profit 200p.

Profesionales, ¡no podemos prescindir de vosotros!



¡Ayuda a un principiante!
 

kolyango:

En el par sobre el que se lanzará el EA, tan pronto como el valor sea igual a 0,9570, abra una orden de mercado para vender 0,1 lotes con un número mayúsculo (para que los EAs en diferentes ventanas no confundan las órdenes), Stop-Loss 100p, Take-Profit 200p.

¡Ayuda para un principiante!
¿Qué sentido tiene escribir un EA de una sola vez? Ponga una orden pendiente y funcionará como usted quiera. Y montar EAs en las mayores, porque la pausa tendrá cero mayores.
 
Reshetov:
¿Qué sentido tiene escribir un EA puntual? Pon una pausa y se activará por sí mismo de la manera que quieras. Y configurar los EAs para los mayores, porque la pausa tendrá cero mayores.

Tengo que averiguar cómo hacer esto de un indicador...
 

¿cuál es el problema? El problema es que la orden no siempre se abre cuando se cruza la línea, es decir, unas veces sí y otras no... Aunque funciona con el mismo principio...

//+------------------------------------------------------------------+
//|                                                      Вайкофф.mq4 |
//|                                                   Sergey Kodolov |
//|                                              84232676421@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Sergey Kodolov"
#property link      "84232676421@mail.ru"



int total,sum,sumr;  
datetime TimeBarH, TimeBarL;

int Crossed (double nach, double kon, double cenaniz, double cenaverh)
{
   static int last_dir = 0;
   static int cur_dir = 0;
   
   if(nach<cenaverh && kon>cenaverh)cur_dir=1;
   if(nach>cenaniz && kon<cenaniz)cur_dir=2;
   
   if(cur_dir != last_dir)
   {
      last_dir=cur_dir;
      return(last_dir);
   }
   else
      return(0);
}


  
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }

  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
                     
bool NewBar = New(); //работаем только с нового бара

int volot = volotilnost(NewBar); //определяем волотильность
Hfr(NewBar,volot); //определяем фрактал верхний
Lfr(NewBar,volot); //определяем фрактал нижний

      double BuyLine, SellLine;
   
      BuyLine = ObjectGet("upline",OBJPROP_PRICE1);
      SellLine = ObjectGet("downline",OBJPROP_PRICE1);

int isCrossed = Crossed(Open[0],Bid,SellLine,BuyLine); //говорит о пересечении баром линии
OrderOpenFunction(isCrossed);



//----
   return(0);
  }
//+------------------------------------------------------------------+


bool New()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   //Print("lastbar = ",lastbar," curbar = ",curbar);
   if(lastbar!=curbar)
   {
      lastbar = curbar;
      //Print("ypa");
      return(true);
   }
   else
      return(false);
}

int volotilnost (bool NewBar)
{
   if(NewBar == true)
   {
      for(int i=0;i<=kolbar;i++)
      {
         sum = sum + MathAbs(High[i]-Low[i])*1000;
         //Print(sum);
      }
      sumr = sum/kolbar;
      Print(sumr);
      return(sumr);
   }   
}

void Hfr(bool NewBar, int volot)
{
   if(NewBar == true)
   {
      if(volot > kolbarv)
      {
         if(iHigh(Symbol(),TF,5)<iHigh(Symbol(),TF,4))
         {
            if(iHigh(Symbol(),TF,4)<iHigh(Symbol(),TF,3))
            {
               if(iHigh(Symbol(),TF,2)<iHigh(Symbol(),TF,3))
               {
                  if(iHigh(Symbol(),TF,1)<iHigh(Symbol(),TF,2))
                  {
                     ObjectDelete("upline");
                     ObjectCreate("upline",OBJ_HLINE,0,0,(iHigh(Symbol(),TF,3)));
                     TimeBarH = iTime(Symbol(),TF,3);
                  }
               }
            }
         }
      }   
   }   
}
         

void Lfr(bool NewBar, int volot)
{
   if(NewBar == true)
   {
      if(volot > kolbarv)
      {
         if(iLow(Symbol(),TF,5)>iLow(Symbol(),TF,4))
         {
            if(iLow(Symbol(),TF,4)>iLow(Symbol(),TF,3))
            {
               if(iLow(Symbol(),TF,2)>iLow(Symbol(),TF,3))
               {
                  if(iLow(Symbol(),TF,1)>iLow(Symbol(),TF,2))
                  {
                     ObjectDelete("downline");
                     ObjectCreate("downline",OBJ_HLINE,0,0,(iLow(Symbol(),TF,3)));
                     TimeBarL = iTime(Symbol(),TF,3);
                  }
               }
            }
         }
      }   
   }   
}

void OrderOpenFunction(int isCrossed)
{
   total = OrdersTotal();
   if(total<1)
   {
      if(isCrossed == 1)
      {
         OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"Покупка",Magic,0,Green);
      }
      if(isCrossed == 2)
      {
         OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продажа",Magic,0,Red);
      }
   }   
}
Creo que el error está en isCrossed, pero no lo encuentro ahí... He eliminado parte del código (donde guardo algunos datos en arrays), porque sobrecarga el código, pero si lo necesito, también lo compartiré con gusto
 
Buenas noches! He puesto una orden pendiente de bylimit, sin stop, error 130 !!!! ¿Qué puede ser? ¿O estoy metiendo la pata otra vez? Por favor, aconséjeme.
 

Hola a todos.

¿Puedes decirme cómo describir el cruce de la línea principal y la línea de señal del estocástico?

 

Algo así, en mi mente

F=iStochastic( Symbol(), 0, 5, 3, 3, MODE_SMA, 1,MODE_MAIN , 0) ;
   SIGNAL=iStochastic( Symbol(), 0, 5, 3, 3, MODE_SMA, 1,MODE_SIGNAL , 0) ;
   if (F==SIGNAL) {Урра!!!!; }
 

una pregunta más, por qué el programa dice que el objeto existe, cuando en realidad no lo hace (sólo miro el monitor y no veo el objeto claramente)

void DrawLines()
{
   ObjectCreate("line1",OBJ_TREND,0,ArrayH[1],iHigh(Symbol(),TF,iBarShift(Symbol(),TF,ArrayH[1])),ArrayH[2],iHigh(Symbol(),TF,iBarShift(Symbol(),TF,ArrayH[2])));
   Print(GetLastError());
}

iBarShift(Symbol(),TF,ArrayH[1]) - da el número de barra, lo he comprobado todo a través de Print(). Pero GetLastError me da el error 4200 - no entiendo qué es lo que pasa =)

 
kolyango:

Tengo que averiguar cómo hacer esto desde un indicador...

No hay forma de salir del indicador