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

 

> err=StringToInteger((string)err)

isto deve ser registrado nos anais ;-)

originalmente em erro, você obviamente recebeu int da GetLastError(). Converter código de erro em descrição legível ErrorDescription(err); desde que #include <stdlib.mqh> esteja habilitado.

mas a maneira como está escrito é um aborrecimento.

PS/ E não aprenda programação MQL. MQL 4 e 5 são idiomas-alvo para uma determinada plataforma.

 

Você pode me dizer se pode escrever desta forma. não quer abrir transações. talvez o formato dos números calculados esteja errado? ou outros defeitos no código?


duplo TakeLong(duplo shp)

{

int CurrentDayRange=0, fiveDayATR=0, take=0;

duplo TP_ATR=0;

//////Informações pivot

duplo P, S1, R1, S2, R2, S3, R3;

duplo LastHigh, LastLow, x;

int counted_bars = IndicatorCounted();

int limit, i;

shp=iHigh(Symbol(),PERÍODO_D1,0);


//---- Cálculo do indicador Pivot

if(counted_bars == 0)

{

x = Período();

if(x > 240)

retorno(-1);

}

if(counted_bars < 0)

retorno(-1);

limite = (Barras - contadas_barras) - 1;

//----

for(i = limite; i >= 0; i--)

{

if(High[i+1] > LastHigh)

LastHigh = High[i+1];

//----

if(Low[i+1] < LastLow)

LastLow=Low[i+1];

if(TimeDay(Time[i]) != TimeDay(Time[i+1])

{

P = (LastHigh + LastLow + Close[i+1]) / 3;

R1 = (2*P) - LastLow;

S1 = (2*P) - LastHigh;

R2 = P + (LastHigh - LastLow);

S2 = P - (LastHigh - LastLow);

R3 = (2*P) + (LastHigh - (2*LastLow));

S3 = (2*P) - ((2* LastHigh) - LastLow);

LastLow = Aberto[i];

LastHigh = Aberto[i];

}

}

//// Cálculo doATR

para (i=1;i<6;i++)

{ if(iHigh(NULL, PERÍODO_D1, i)-iLow(NULL, PERÍODO_D1, i)>0) FiveDayATR += (iHigh(NULL, PERÍODO_D1, i)-iLow(NULL, PERÍODO_D1, i));}

FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());

CurrentDayRange = (iHigh(NULL, PERÍODO_D1, i)-iLow(NULL, PERÍODO_D1, i)))

if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; caso contrário TP_ATR=0;


if (Bid>R1 && TP_ATR==0) take=shp;

senão se (Bid<R1 && R1<TP_ATR) take=R1;

senão take=TP_ATR;

retorno(take);

}

 
forexpipsrunner: por favor me diga se você pode escrever assim. ele não quer abrir negócios

O código sugerido parece ser um indicador. Os negócios são abertos por um consultor especializado ou por um roteiro. A chamada de função OrderSend não é permitida no indicador. O indicador pode alarmar - inserir a chamada ou som da função Alerta no local apropriado

 
STARIJ:

O código proposto é semelhante ao indicador. Os negócios são abertos por um consultor especializado ou por um roteiro. A chamada de função OrderSend é proibida no indicador. O indicador pode sinalizar - inserir a chamada ou o som da função Alerta no local apropriado


Este é o código de definição TP, que envia o resultado para OrderSend. sem este algoritmo complexo, os negócios são enviados, mas não há como enviá-los. Chamo a função TP = TakeLong(SHP);

 
forexpipsrunner: este é o código de definição TP que dá o resultado à OrderSend . sem este algoritmo são enviados negócios, não há como com ele

Há muitas maneiras de depuração - o processo de encontrar um erro quando é estabelecido que existe um. O primeiro é F5 - iniciar a depuração no MetsEditor. 2) usar Alertas para rastrear a execução. 3 e 4) saída de informações de depuração para etiquetas de texto e função Comentar. Escolha a maneira conveniente e depure esta função simples - então você se tornará um programador. Um programa com milhares de linhas é considerado complexo.

 
forexpipsrunner:

Você pode me dizer se pode escrever dessa forma. não quer abrir transações. talvez o formato dos números calculados esteja errado? ou algum outro defeito no código?


int take=0 - você retorna um número inteiro, esta variável não deveria ser um duplo?
 
Olá! Eu quero fazer um padrão "trilho", mas não consigo descobrir o tamanho do corpo do candelabro....

Calculo o tamanho do corpo do castiçal da seguinte forma:
MathAbs( Close1[i] - Open1[i] ) / Ponto + 1
MathAbs( Close2[i] - Open2[i] ) / Ponto + 1

Em código completo parece assim

duplo Fechar1 = iClose(Símbolo(), 0, i);
duplo Abrir1 = iOpen(Símbolo(), 0, i);
duplo Fechar2 = iClose(Símbolo(), 0, i+1);
duplo Abrir2 = iOpen(Símbolo(), 0, i+1);

MathAbs( Close1[i] - Open1[i] ) / Ponto + 1
MathAbs( Close2[i] - Open2[i] ) / Ponto + 1

if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}

É correto? Como faço para que funcione?
 
sviter-pro:   Olá, eu quero fazer um padrão de "trilho", mas não consigo descobrir o tamanho do corpo da vela....

Você já experimentou na conta demo M1? O que você recebe?

 
STARIJ:

Você já experimentou em uma conta demo M1? Como está funcionando?

Nada funciona....(((
 
void trailing(string symbol,string comment,int magic,int trail_p)
  {
   if(symbol==NULL) symbol=Symbol();
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==symbol && OrderComment()==comment && OrderMagicNumber()==magic)
           {
            switch(OrderType())
              {
               case OP_BUY:
                  if(OrderOpenPrice()+(trail_p*Point)<Ask && OrderStopLoss()+(trail_p*Point)<Ask)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
               case OP_SELL:
                  if(OrderOpenPrice()-(trail_p*Point)>Bid && OrderStopLoss()-(trail_p*Point)>Bid)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
              }
           }
        }
        Comment("StopLoss=",OrderStopLoss());
     }
  }

Você pode me dizer por que a rede de arrasto é acionada em cada tic-tac?

Razão: