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

 
Tema97:

¿qué hago ahora? Tengo una estrategia basada en canales, ¿hay alguna alternativa de sustitución?

Por supuesto que sí. Calcule los valores, guárdelos en una matriz o estructura y utilícelos para su EA. Y también puedes dibujar los objetos desde ahí - los valores están disponibles.
 
Tema97:

¿qué hago ahora? Tengo una estrategia basada en canales, ¿hay alguna alternativa de sustitución?

¿Qué hay que incorporar? Consultar el indicador a través de iCustom.
Para vender, puede incrustar con#recurso
 
Quiero implementar lo siguiente
la posibilidad de añadir diferentes plazos a UNA hoja (en diferentes ventanas pero en una sola hoja)
Por favor, aconséjeme dónde ir y dónde cavar). ¿es posible a través de mql o WInApi?
tal vez hay ejemplos del artículo que no pude encontrar(
 
kocunyc89:

Por favor, ayúdame a arreglar esto! da error 'Void' - declaración sin tipo 36 4 y ¿dónde debo reordenar o escribir return?
//--------------------------------------------------------------------
Void OnTick()
{

void se escribe con minúscula en lugar de con mayúscula. Mira, es un color diferente. Poner el cursor sobre esta palabra y pulsar F1 - a menudo ayuda.

Aparecen tantos mensajes de error después de arreglarlo... He arreglado los mensajes de error, pero comprueba tú mismo la lógica

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  if (Lots==0)
  {
    double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    double step   = MarketInfo(Symbol(), MODE_LOTSTEP);
    double account = AccountFreeMargin();
    double percentage = account*RiskPercentage/100;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

void se escribe con minúscula, no con mayúscula. Mira si es de otro color. Poner el cursor sobre esta palabra y pulsar F1 - a menudo ayuda.

Después de arreglarlo aparecen tantos mensajes de error... Arreglados los mensajes de error, pero comprueba tú mismo la lógica


¡Muchas gracias, amigo!

 
¡Hola, señores comerciantes! Escribí un robot de señales basado en el código que publiqué arriba. El robot genera señales para las opciones casi con precisión, pero con un retraso de dos barras. ¿Qué debería cambiar en el código para producir los mismos resultados pero dos barras antes? ¿O es imposible? Gracias.
 
Me pueden aconsejar - Tengo un indicador personalizado - Canal - Necesito devolver el valor del límite superior del canal - ¿Cómo puedo hacerlo?
 
artmedia70:

La variable int contiene exactamente el número de segundos desde 1970, mientras que la variable datetime contiene la fecha.

Si necesita una barra determinada en el historial, no importa cómo la especifique: por fecha o por número de segundos, en cualquier caso, la variable indicará la hora de apertura de esta barra en particular, independientemente de la llegada de nuevos ticks y de la apertura de nuevas barras.

Muchas gracias, pero hay un problema más. Tengo un indicador que tiene la función stat, esta función debería usarse SOLO cuando llega una nueva señal, pero este problema está contando en cada barra, he hecho todo y he normalizado el doble en comparación, así que supongo que estoy jodido. Se ha acabado la tarde, ¿alguien puede explicar qué pasa? ???? ¡¡¡¡¡El indicador en el atache en la línea 193 es una llamada a una función con una condición, pero la condición no se cumple y el Furction stat se calcula a la llegada de cada barra, ya estoy aburrido de encontrar el error, chicos ayuden por favor !!!!! Gracias de antemano....
Archivos adjuntos:
 

Recién ahora descubrí que la función stat se recalcula si el indicador es llamado desde otro indicador, cuando ambos están en el gráfico. Es decir, una vez se calcula para sí mismo y la segunda vez para el indicador que lo llama. ¿Qué es?

 

En la imagen se muestra lo siguiente. El comentario en la parte superior es el valor del buffer en el indicador principal en el que tiene lugar el cálculo, y la impresión (abajo) es el mismo buffer, pero sólo llamado en otro indicador y emitido en la impresión. ¡¡¡¡¡La diferencia es significativa, PERO PORQUE!!!!!

elprimer archivo es el principal, el segundo llama al buffer del primero....

Archivos adjuntos: