[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 413

 

DE ACUERDO.

Sí, el nuevo bar.

 
Neo777:

DE ACUERDO.

Sí, el nuevo bar.

https://www.mql5.com/ru/articles/1494 aquí hay formas de determinar que un nuevo bar ha comenzado. Cómo ha empezado - compruebe sus condiciones
 

Buenas tardes.Gente, alguien por favor ayude con la función WindowScreenShot. Por tercer día nadie responde((. He escrito el siguiente script (ver archivo adjunto).

En 2 palabras sobre el guión. El script está destinado a realizar capturas de pantalla del gráfico actual de la ventana del terminal del cliente. En la variable externa datetime Time_bar se especifica la hora de la barra a partir de la cual y hasta la barra cero se creará (teniendo en cuenta la sangría derecha en el gráfico). En la línea

int número_de_barra=iBarShift(NULL,0,Barra_de_tiempo,true)

se busca el número de serie del bar que hemos especificado en la variable externa datetime time_bar. La propia función, en la línea

bool f=WindowScreenShot(name+".gif",1024,768,bar_number,Scale,View_graph)

Ahora la pregunta es... Para simplificar, supongamos que necesitamos crear una captura de pantalla de las dos últimas barras. Entonces, si la línea

int número_de_barra=iBarShift(NULL,0,Barra_de_tiempo,true)

se deja sin modificar, el resultado será la siguiente captura de pantalla


Es decir, no hay ninguna barra en la captura de pantalla (aunque la cadena

int bar_number=iBarShift(NULL,0,bar_time,true)

el número de barra por tiempo debe ser calculado)

Si esta línea se presenta de la siguiente manera

int número_de_barra=iBarShift(NULL,0,Time_bar,true)+2

obtendrás la captura de pantalla que queríamos:

Pregunta: ¿por qué en caso de que esta cadena tenga la siguiente forma

int número_de_barra=iBarShift(NULL,0,Barra_de_tiempo,true)

¿la captura de pantalla está tomada con un desplazamiento de 2 barras a la derecha del especificado en la línea anterior?

P.D. Para no ensuciar el foro, gracias de antemano por la respuesta

Archivos adjuntos:
 
ilunga:
mostrar código + qué parámetros de entrada hay en el indicador

Lo he comprobado 20 veces, no escribiría sin comprobarlo 20 veces, todos los parámetros son correctos como en el indicador. El problema puede estar en otra parte, ¿quizás te has encontrado con un problema así?
 

Colegas!!! ¡Buenas noches!

He descubierto un increíble indicador QQE y decidí encontrar un Asesor Experto basado en este indicador.... y no pude encontrarlo. Pero en este foro encontré un mensaje del usuario POZITIV.

Escribió la siguiente lógica: "cuando la línea roja cruza la línea amarilla hacia arriba, se debe abrir una orden de compra, cuando la roja cruza la línea amarilla hacia arriba - una orden de venta".

Como resultado, tenía un código a medio terminar del Asesor Experto.

He calculado otra lógica: cuando la curva en negrita cruza la línea de puntos de arriba a abajo - hay que vender y cerrar ese lote (comprar), cuando la negrita roja cruza la línea de puntos de abajo a arriba. Y en el mismo momento abrir inmediatamente otro lote (comprar), que debe cerrar (vender) cuando sucede la situación contraria.....-así que constantemente abrir un lote, y cada cruce de las líneas se utiliza para cerrar uno y simultáneamente abrir otro lote. Y la intersección probablemente debe ser considerado por sus valores después del cierre de una barra, es decir, si los 20 minutos (después del cierre), negrita tenía un valor de 51 (condicional), y el punto 50, y 21 minutos (después del cierre), negrita 50 y el punto 51, entonces usted tiene que vender. No hay SL ni TC.

En principio, la lógica es sencilla. No hay flechas, ni alarmas ni mensajes. Sólo se puede operar en modo automático en su forma pura.

Por favor, ayúdame a refinar este código (abajo) a esta lógica. Y sería posible ajustar el periodo (de 1 minuto a 1 día) y el parámetro SF (suavizado).

Por segundo día he estado tratando de entender el código y corregirlo, pero no soy un programador(((((((((((


¡Realmente espero su ayuda!

//--- input parameters
extern double MaxRisk=1.0;
extern double FixLot = 0.01;
extern double Exponent=2.0;
extern int Magic=888;

// костыли

extern int TakeProfit=100;
extern int StopLoss=100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
//----
   int Count=0;
   double b0,b1;
   int ticket;

// параметры индикатора
   int SF=5; // original 5
   int RSI_Period=14; // original 14
   double DARFACTOR=4.236; //original 4.236

//------------ Параметры из индикатора QQEA -----------------------
// Buffer0 -- красная жирная
   string Buffer0=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,0,0);
// Buffer1 -- жёлтый пунктир
   string Buffer1=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,1,0);

   b0=StrToDouble(Buffer0);
   b1=StrToDouble(Buffer1);


   double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибке
   if(Lot==0)
     {
      Alert("Недостаточно средств!");
      return(0);
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_BUY,Lot);
      if(ExistOrders(Symbol(),1,888,0)==true) // проверяем наличие ордера sell
        {
         CloseOrder();
        }
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_SELL,Lot);
      if(ExistOrders(Symbol(),0,888,0)==true) // проверяем наличие ордера buy
        {
         CloseOrder();
        }
     }

   Comment("Red line: ",b0,"Yellow line: ",b1);
   return(0);
  }
//-------------------------------------------------------------
//расчёт лота

double GetLot(int Risk)
  {
   double Free=AccountFreeMargin();
   double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
   double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
   double Step=MarketInfo(Symbol(),MODE_LOTSTEP);
   double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
   if(Lot<Min_Lot) Lot=Min_Lot;
   if(Lot>Max_Lot) Lot=Max_Lot;
   if(Lot*One_Lot>Free) return(0.0);
   return(Lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistOrders(string sy="",int op=-1,int Magic=-1,datetime ot=0)
  {
   int i,k=OrdersTotal(),ty;

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ty=OrderType();
         if(ty>1 && ty<6)
           {
            if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))
              {
               if(Magic<0 || OrderMagicNumber()==Magic)
                 {
                  if(ot<=OrderOpenTime()) return(True);
                 }
              }
           }
        }
     }
   return(False);
  }
//открытие нового ордера
int NewOrder(int Cmd,double Lot)
  {
   double TP=0; //тейкпрофит
   double SL=0; //стоплосс
   double PR=0; //Цена
   while(!IsTradeAllowed()) Sleep(100);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Cmd==OP_BUY)
     {
      PR=Ask;
      if(TakeProfit>0) TP=Ask+TakeProfit*Point;
      if(StopLoss>0) SL=Ask-StopLoss*Point;
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Cmd==OP_SELL)
     {
      PR=Bid;
      if(TakeProfit>0) TP=Bid-TakeProfit*Point;
      if(StopLoss>0) SL=Bid+StopLoss*Point;
     }
   if(GetOrdersCount(Magic,Cmd)>0)return(0);
   int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green);
   if(tic<0) Print("Ошибка открытия ордера: ",GetLastError());
   return(tic);
  }
// закрытие ордера
void CloseOrder()
  {
   double PR=0;
   while(!IsTradeAllowed()) Sleep(100);
   if(OrderType()==OP_BUY) PR=Bid;
   if(OrderType()==OP_SELL) PR=Ask;
   if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
      Print("Ошибка закрытия ордера: ",GetLastError());
   return;
  }
//+------------------------------------------------------------------+
// подсчет кол-ва открытых позиций
int GetOrdersCount(int MagicNumber,int Type)
  {
   int count=0;

   for(int i=0; i<OrdersTotal(); i++)
     {
      // already closed
      if(OrderSelect(i,SELECT_BY_POS)==false) continue;
      // not current symbol
      if(OrderSymbol()!=Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber()!=MagicNumber) continue;

      if(OrderType()==Type)
        {
         count++;
        }
     }

   return(count);
  }
//-------------------------------------------------------
 
sss2019:

Bueno, yo mismo he comprobado todo 20 veces, sin comprobar 20 veces no escribiría, todos los parámetros son correctos como en el indicador. El problema probablemente esté en otra parte, ¿quizás alguien se haya encontrado con un problema así?
Nada más que parámetros erróneos introducidos en iCustom y no puede ser. Búscalo.
Pasé una tarde tratando de resolverlo yo mismo. He confundido la secuencia de parámetros al transferir el externo de un indicador a un EA. Estaba casi loco, la secuencia de parámetros era la misma :))
 
granit77:
Nada más que la entrada de parámetros incorrectos en iCustom y no puede ser. Búscalo.
Yo mismo me pasé una tarde peleando con él el otro día. He confundido la secuencia de parámetros al transferir los parámetros externos del indicador al Asesor Experto. Estaba casi loco, la secuencia de parámetros era la misma :))

iCustom(Symbol(),0,"RMRCS_entry-point"," ",5,6,7,62,-62,57,-57,54,-54,0.7,1.1,1.07," ",1,9,6,1,34,6,0,4,89,1,3,3.0,2.0,0.5,3.0," ",6,6,70,30,0.0,6,3.0," ",1,21,1,45,89,1,35,89,1,9," ",4,2,5,1," ",49,-49,0,0,0,0,0,0,0,0," ",0,34,200,150,1,100," ",1,3,1,1,2," ",1.4,3.7,0,1);


Y aquí están los parámetros

extern string REI_str = "";
extern int REI1_Per=5; 
extern int REI2_Per=6;     
extern int REI3_Per=7;     
extern int REI1_up=62;    
extern int REI1_dn=-62;    
extern int REI2_up=57;     
extern int REI2_dn=-57;            
extern int REI3_up=54;     
extern int REI3_dn=-54;            
extern double REI1_ct=0.7;  
extern double REI2_ct=1.1;  
extern double REI3_ct=1.07;
extern string MACD_str = "";
extern int MACD_FastMA_Meth=1;   
extern int MACD_FastMA_Per=9;    
extern int MACD_FastMA_Price=6; 
extern int MACD_SlowMA_Meth=1;   
extern int MACD_SlowMA_Per=34; 
extern int MACD_SlowMA_Price=6; 
extern int MACD_SL_Meth=0;      
extern int MACD_SL_Per=4;       
extern int MACD_Diap_Per=89;    
extern int MACD_Slope_Meth=1;   
extern int MACD_Slope_Per=3;  
extern double MACD_ct_1 = 3.0; 
extern double MACD_ct_2 = 2.0;  
extern double MACD_ct_3 = 0.5;  
extern double MACD_ct_4 = 3.0;  
extern string RSI_str = "";
extern int RSI_Per = 6;     
extern int RSI_Price = 6;  
extern int RSI_up = 70;      
extern int RSI_dn = 30;     
extern double RSI_ct1 = 0.0; 
extern int RSI_ct2 = 6;      
extern double RSI_ct3 = 3.0;
extern string CHO_str = "";
extern int  CHO_FastMA_Meth=1;      
extern int  CHO_FastMA_Per=21;      
extern int  CHO_SlowMA_Meth=1;      
extern int  CHO_SlowMA_Per=45;      
extern int  CHO_DiapVal_Per=89;     
extern int  CHO_MADiapVal_Meth=1;   
extern int  CHO_MADiapVal_Per=35;    
extern int  CHO_SlopeDiapVal_Per=89;  
extern int  CHO_MASlope_Meth=1;      
extern int  CHO_MASlope_Per=9;       
extern string Stoch_str = "";
extern int Stoch_KPer=4;       
extern int Stoch_DPer=2;        
extern int Stoch_Slow=5;        
extern int Stoch_SL_MA_Meth=1; 
extern string EntryLevel_str = "";
extern int REI_SvS_up = 49;  
extern int REI_SvS_dn = -49; 
extern int MACD_SvS_up = 0; 
extern int MACD_SvS_dn = 0;  
extern int RSI_SvS_up = 0;  
extern int RSI_SvS_dn = 0; 
extern int CHO_SvS_up = 0;  
extern int CHO_SvS_dn = 0;  
extern int STO_SvS_up = 0; 
extern int STO_SvS_dn = 0;  
extern string EntryOther_str = "";
extern int MALgthBar_Meth=0;
extern int MALgthBar_Per=34;
extern int MAXLgthBar = 200;
extern int TtS_MinABS = 150; 
extern int Shift_Points = 1; 
extern int Start_Calc = 100;   
extern string EntryCondition = "";
extern bool Ban_InvEntry = true;    
extern int InvEntry_Bars = 3;        
extern bool Ban_TtS_Decline=true;   
extern bool Ban_Entry_Series = true; 
extern int MAX_Entry_Series=2;      
extern string Gen_str = ""; 
extern double DiapBar_CtSl = 1.4;
extern double TakeProf_CtSl = 3.7;
 
sss2019:
¿Puede decirme si hay un límite en el número de parámetros de un indicador no estándar, cuando se conecta a través de iCustom?

Tengo hay un indicador con unos 8 parámetros He introducido todos los parámetros correctamente, lo he comprobado varias veces, pero el error ')' sigue apareciendo en la compilación - recuento de parámetros erróneos D:\NInstaTrader\Nexperto_2.mq4 (11, 280)

Yo diría que "alrededor del 80"
 

Elimina el extern de algunos de los parámetros que se usan poco y no habrá confusión.

Atención a mis preguntas:

¿Por qué aparecen objetos bajo los candelabros, cuál es la razón?

Me pueden recordar como hacer un checkbox a precio, cual es la propiedad del objeto.

 
PapaYozh:

Yo diría que "unos 80".

Yo diría que exactamente 80. Y sss2019 tiene todo bien con los parámetros. ¿Pero qué es este indicador salvaje con tantos parámetros?