Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 349

 

É possível passar parâmetros dinâmicos de entrada para o indicador através do iCustom? Quando tento fazer isto, uma nova janela indicadora se abre, para cada novo parâmetro de entrada dinâmica.

   if(NewBarCur())BulsPeriod++;
   double sep_window=iCustom(Symbol(),PERIOD_CURRENT,"Bulls",BulsPeriod,0,0);
 
E esta pergunta, há alguma maneira de saber se, por exemplo, ainda há 1 barra ou 3 minutos na tabela de teste?
 
Artyom Trishkin:

Nesta linha eu quero começar a ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este será um bom lugar para discutir tarefas, algoritmos para resolvê-las, e quaisquer outras questões, de qualquer forma, relacionadas à programação de MT.

Espero que outros membros experientes do nosso fórum se juntem a nós e que o tópico seja interessante para todos.


Artyom Trishkin:

Neste ramo, eu gostaria de começar a ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este será um bom lugar para discutir problemas, algoritmos e quaisquer outras questões relativas à programação MT.

Espero que outros membros experientes do nosso fórum se juntem a nós para resolver as questões e que o tópico seja de interesse para todos.


Artyom Trishkin:

Neste ramo, eu gostaria de começar a ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este será um bom lugar para discutir problemas, algoritmos e quaisquer outras questões relativas à programação MT.

Espero que outros membros experientes do nosso fórum se juntem a nós e que este tópico seja interessante para todos.


Artyom Trishkin:

Neste ramo, eu gostaria de começar a ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este será um bom lugar para discutir problemas, algoritmos e quaisquer outras questões relativas à programação MT.

Espero que outros membros experientes do nosso fórum se juntem a nós e que este tópico seja interessante para todos.


Artyom Trishkin:

Neste ramo, eu gostaria de começar a ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este será um bom lugar para discutir tarefas, algoritmos de sua solução e quaisquer outras questões, de uma forma ou de outra, relacionadas à programação de MT.

Espero que outros membros experientes do nosso fórum se juntem a nós e que este tópico seja interessante para todos.


Artyom

Artyom Trishkin:

Quero começar este capítulo para ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este é um lugar para discutir tarefas, algoritmos para resolvê-las e quaisquer outras questões relacionadas à programação de MT de uma forma ou de outra.

Espero que outros membros experientes do nosso fórum se juntem a nós na resolução dos problemas e que o tópico seja de interesse para todos.


Ajude-me, acrescentei a função trailing stop à minha EA, testei-a e ela me dá dois erros. - Não tenho a menor idéia de como consertá-los. Entretanto, as negociações são fechadas de acordo com a antiga estratégia, depois que o preço tocou o limite superior do canal e o limite inferior, respectivamente. Acho que algo tem que ser mudado aqui também. - Chamada de volta para os caras do exército do dnr.

#Direitos autorais "Copyright 2017, MetaQuotes Software Corp.

#link da propriedade "https://www.mql5.com"

#propriedade versão "1.00"

#propriedade rigorosa


//---------------------------------------------------------

Lotes duplos externos = 0,01;

Exterior int TakeProfit = 600;

StopLoss int externo = 25;

magia int externa = 0001;

Escorregão externo int = 3;

externo int TralType = 0; // 0-SAR, 1-ATR, 2-HMA.

duplo SAR_Step externo = 0,02;

duplo SAR_Max externo = 0,2;

período ATR_Periodo externo int = 14;

duplo externo ATR_K = 2,0;

período HMA_Periodo externo interno = 16;

método externo interno HMA_Método = 3;

HMA_Shift externo interno = 0;

data/hora LBT;

//---------------------------------------------------------

TMA fio externo = "parâmetros indicadores TMA";

String externo TimeFrame = "time frame atual";

Externo int Médio Comprimento = 56;

preço interno externo = "PREÇO_CLOSE";

duplo ATRMultiplicador externo = 2,0;

período ATRP externo interno = 100;

bool externo Interpolar = verdadeiro;

//---------------------------------------------------------

duplo PriceHigh, PriceLow, SL, TP;

int ticket;


//+------------------------------------------------------------------+

//| Função de iniciação de especialista |

//+------------------------------------------------------------------+

int OnInit()

{

se (Dígitos == 3 || Dígitos == 5)

{

TakeProfit *= 10;

StopLoss *= 10;

Slippage *= 10;

}

return(INIT_SUCCEED);

}

//+------------------------------------------------------------------+

//| Função de desinicialização especializada |

//+------------------------------------------------------------------+

nulo OnDeinit(const int razão)

{


}

//+------------------------------------------------------------------+

//| função tick expert |

//+------------------------------------------------------------------+

nulo OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (bilhete > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Dígitos);

TP = NormalizeDouble(Bid - TakeProfit*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro de modificação do pedido!)

}

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

bilhete = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (bilhete > 0)

{

TP = NormalizeDuplo(Ask + TakeProfit*Point, Dígitos);

SL = NormalizeDouble(Ask - StopLoss*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar o pedido de compra!)

} else Print("Erro ao abrir o pedido de compra");

}

//+------------------------------------------------------------------+

//| Função de iniciação de especialistas |

//+------------------------------------------------------------------+

int init()

{

//--------


//--------

retorno (0);

}

//+------------------------------------------------------------------+

//| função tick expert |

//+------------------------------------------------------------------+

nulo OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (bilhete > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Dígitos);

TP = NormalizeDouble(Bid - TakeProfit*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar a ordem de venda!)

} else Print("Erro ao abrir a ordem de venda!)

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

bilhete = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (bilhete > 0)

{

TP = NormalizeDuplo(Ask + TakeProfit*Point, Dígitos);

SL = NormalizeDouble(Ask - StopLoss*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar o pedido de compra!)

} else Print("Erro ao abrir o pedido de compra");

}

se (Pergunte <= PriceLow && CountSell() > 0)

{

para (int i = OrderTotal() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

se (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Imprimir("Vender ordem fechar erro!)

}

}

}

if (Licitação >= PriceHigh && CountBuy() > 0)

{

para (int i = OrderTotal() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Imprimir("OrderClose Buy error!)

}

}

}

}

//+------------------------------------------------------------------+

int CountSell()

{

int count = 0;

para (int trade = OrdensTotal()-1; trade>=0; tradee--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELLL)

contar++;

}

}

devolução(contagem);

}//+------------------------------------------------------------------+

int CountBuy()

{

int count = 0;

para (int trade = OrdensTotal()-1; trade>=0; tradee--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

contar++;

}

}

devolução(contagem);

}

//+------------------------------------------------------------------+

//| Função de desinicialização especializada |

//+------------------------------------------------------------------+

int deinit()

{

//+-------


//+-------

retorno (0)

}

//+------------------------------------------------------------------+

//| função de início especializado |

//+------------------------------------------------------------------+

int Start()

{

//-----

erro de bool = falso;

se (LBT!=Time[0]) {

se (OrderTotal()!=0) {

para (int i=0; i<OrdersTotal(); i++) {

se (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

duplo SL = OrderStopLoss();

se OrderType()==0) {

interruptor (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = Alto[1] - iATR(NULL,0,ATR,Período,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0)

pausa;

}

se (SL<OrderStopLoss())

SL = OrderStopLoss();

}

se (OrderType()==1) {

interruptor (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = Baixa[1] + iATR(NULL,0,ATR,Período,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0)

pausa;

}

se (SL>OrderStopLoss())

SL = OrderStopLoss();

}

se (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

erro = verdadeiro;

}

}

}

}

se (!erro)

LBT = Tempo[0];

}

retorno (0);

}

//+------------------------------------------------------------------+

 
vkravtzov:

Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!


Aprenda a inserir código!!!

 
vkravtzov: Ajude-me a entender, acrescentei a função de parada de trilha ao Expert Advisor, testei-a e ela me dá dois erros. - Eu rachei meus cérebros, não consigo descobrir como consertá-los. Entretanto, as negociações são fechadas de acordo com a antiga estratégia, depois que o preço tocou o limite superior do canal e o limite inferior, respectivamente. Acho que algo tem que ser mudado aqui também. - Chamada de volta para os caras do exército do dnr.

Decidimos ajudar. Mas tenho perguntas para o autor - você tem estas duas funções de inicialização - o que elas fazem?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)
   {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
   }
   return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }

Há duasfunções OnTick().... e uma terceira função no Start() - todas elas são executadas com a chegada do tick. E em que ordem o terminal os iniciará?

Erro: falta um parêntese de fechamento no final da função OnTick()

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
  PriceLow  = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
  if(CountSell() == 0 && Bid >= PriceHigh)
  {
     ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
     if (ticket > 0)
     {
        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
           if (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на продажу!");
     }
  }
  if (CountBuy() == 0 && Ask <= PriceLow)
  {
     ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
     if (ticket > 0)
     {
        TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
        SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
        if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
                Print("Ошибка модификации ордера на покупку!");
     }   else Print("Ошибка открытия ордера на покупку");
   }
}    // Эту скобку добавил !!!!!!!!!!!!!!!!!!!!!!!!!

Agora o compilador detectou 8 erros. Eu apaguei .

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//--------
//--------
    return (0);
    }


//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//+-------
//+-------
   return (0);
   }

Há 7 erros agora.

Eu substituí if(OrderType()==0) por um parêntese depois de se: if(OrderType()==0) - 8 erros ocorreram

iATR(NULL,0,ATR,Período,1) - precisamos do iATR(NULL,0,ATR_Periodo,1) - ocorreram 2 erros

erro de bool = falso; precisamos de erro de bool = falso; - erros tornaram-se 3

Onde podemos obter o indicador VininI_HMAsound&amp? Que parâmetros existem? = o erro ainda seria 1

E por que você faria uma pergunta em três lugares?

 

Ajude a baixar e instalar EAs e sinais grátis no mt4 não como neemogu encontrar download de vídeo apenas como instalar, mas sem download. Diga-me onde procurar

 
vovik36 Степанов:

Ajude a baixar e instalar EAs e sinais grátis no mt4 não como neemogu encontrar download de vídeo apenas como instalar, mas sem download. Por favor, informe onde procurar.

Primeiro formou-se, depois veio.

 
Artyom Trishkin:

O que acha disso?


   for(i=pos; i<rates_total && !IsStopped(); i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1; k<=i; k++)
       {double ima=iMA(Symbol(),1,60,0,1,0,k);
         if(dmin>ima)  dmin=ima;
         if(dmax<ima)  dmax=ima;
                   Comment(ima);
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }

Hi. Você pode me dizer porque não vêima=iMA(Symbol(),1,60,0,1,0,k). O comentário mostra uma cotação muito mais alta do que a própria linha. É a razão pela qual os valores mínimos e máximos não são calculados corretamente.

 
Rustam Bikbulatov:

Hi. Você pode me dizer por que não vêima=iMA(NULL,60,24,0,1,0,k). O comentário mostra uma cotação muito mais alta do que a própria linha. Esta é a razão pela qual os valores mínimos e máximos não são calculados corretamente.

O iMA é numeração como em séries temporais, 0 é o número mais relevante. Pode ser o contrário no seu caso
 
Maxim Kuznetsov:
O iMA é numeração como em séries temporais, 0 é o número mais relevante. E você provavelmente tem isso ao contrário.

É uma aposta não intencional. Isso não muda nada. A questão é que ele se mostra incorretamente com k!

Razão: