[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 413

 

OK.

Sim, o novo bar.

 
Neo777:

OK.

Sim, o novo bar.

https://www.mql5.com/ru/articles/1494 aqui estão as maneiras de determinar se um novo bar começou. Como começou - verifique suas condições
 

Boa tarde, pessoal, alguém por favor ajude com a função WindowScreenShot. Para o 3º dia ninguém responde((. Escreveu o seguinte roteiro (ver arquivo anexo).

Em 2 palavras sobre o roteiro. O script destina-se a fazer screenshots do gráfico atual da janela do terminal do cliente. Na variável externa data/hora Time_bar a hora da barra a partir da qual e até a barra zero será criada (levando em conta o travessão direito no gráfico) é especificado. Na linha

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

o número de série da barra que especificamos na variável externa data/hora_barra externa é procurado. A função em si, na linha

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

Agora a questão é a seguinte... Para simplificar, vamos supor que precisamos criar uma captura de tela das duas últimas barras. Então, se a linha

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

é deixado inalterado, o resultado será a seguinte captura de tela


Ou seja, não há barra na captura de tela (embora a corda

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

o número de barras por tempo deve ser calculado)

Se esta linha for apresentada da seguinte forma

int bar_number=iBarShift(NULL,0,Time_bar,true)+2

você terá a captura de tela que queríamos:

Pergunta: por que no caso desta corda ter a seguinte forma

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

a captura de tela é feita com um deslocamento de 2 barras para a direita da especificada na linha acima?

P.S. A fim de não desperdiçar o fórum, obrigado antecipadamente pela resposta

Arquivos anexados:
 
ilunga:
mostrar código + que parâmetros de entrada estão no indicador

Eu o verifiquei 20 vezes, não escreveria sem verificá-lo 20 vezes, todos os parâmetros estão corretos como no indicador. O problema pode estar em outro lugar, talvez você já tenha encontrado tal problema?
 

Colegas!! Boa noite!

Descobri um incrível indicador QQE e decidi encontrar um Consultor Especialista baseado neste indicador.... e não consegui encontrá-lo. Mas neste fórum eu encontrei uma mensagem do usuário POZITIV.

Ele escreveu a seguinte lógica: "quando a linha vermelha cruza a linha amarela para cima, uma encomenda na Buy deve abrir, quando a vermelha cruza a linha amarela para cima - uma encomenda na Sell".

Como resultado, ele tinha um código semi-acabado do Expert Advisor.

Calculei outra lógica: quando a curva em negrito cruza a linha pontilhada de cima para baixo - é preciso vender e fechar aquele lote (comprar), quando o em negrito vermelho cruza a linha pontilhada de baixo para cima. E, ao mesmo tempo, abrir imediatamente outro lote (comprar), que deve fechar (vender) quando acontece a situação oposta.....- assim, abrir constantemente um lote, e cada cruzamento das linhas é usado para fechar um e simultaneamente abrir outro lote. E o cruzamento provavelmente deve ser considerado por seus valores após fechar uma barra, ou seja, se os 20 minutos (após o fechamento), o negrito tinha um valor de 51 (condicional), e os 50 e 21 minutos (após o fechamento), o negrito 50 e o 51 pontilhado, então você tem que vender. Sem SL ou TC.

Em princípio, a lógica é simples. Sem setas, sem alarmes e mensagens. Somente o comércio em modo automático em sua forma pura.

Por favor, ajude-me a refinar este código (abaixo) para esta lógica. E seria possível ajustar o período (de 1 minuto a 1 dia) e o parâmetro SF (suavização).

Pelo segundo dia tenho tentado entender o código e corrigi-lo, mas não sou um programador(((((((((((


Eu realmente espero sua ajuda!

//--- 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:

Bem, eu mesmo já verifiquei tudo 20 vezes, sem verificar 20 vezes que eu não escreveria, todos os parâmetros estão corretos como no indicador. O problema provavelmente está em outro lugar, talvez alguém tenha encontrado tal problema?
Nada além de parâmetros errados inseridos no iCustom e não podem ser. Procure por ela.
Passei uma noite tentando resolvê-lo eu mesmo. Eu misturei a seqüência de parâmetros ao transferir o externo de um indicador para um EA. Eu estava quase louco, a seqüência de parâmetros era a mesma :))
 
granit77:
Nada além da entrada de parâmetros incorretos no iCustom e não pode ser. Procure-o.
Eu mesmo passei uma noite brigando com ela no outro dia. Misturei a seqüência de parâmetros ao transferir os parâmetros externos do indicador para o Expert Advisor. Eu estava quase louco, a seqüência de parâmetros era a mesma :))

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


E aqui estão os 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:
Você pode me dizer se existe um limite para o número de parâmetros em um indicador não-padrão, quando conectado via iCustom?

Eu tenho há um indicador com cerca de 8 parâmetros Introduzo todos os parâmetros corretamente, verifiquei várias vezes, mas o erro ')' ainda aparece na compilação - parâmetros errados contagem D:\InstaTrader=experts=Expert_2.mq4 (11, 280)

Eu diria "cerca de 80".
 

Remova o exterior de alguns dos parâmetros pouco utilizados e não haverá confusão.

Atenção às minhas perguntas:

Por que os objetos aparecem sob castiçais, qual é a razão para isso?

Você pode me lembrar como fazer uma caixa de seleção para o preço, qual é a propriedade objeto.

 
PapaYozh:

Eu diria "cerca de 80".

Eu diria exatamente 80. E a sss2019 tem tudo certo com os parâmetros. Mas o que é este indicador selvagem com tantos parâmetros???