Ajuda na codificação - página 483

 

Oh cara, você é realmente uma estrela. Eu adoro negociar, mas seria impossível sem sua ajuda. Mais uma vez, obrigado.

 
xtractalpha:
Hi,

Alguém poderia me ajudar com minha função LotsizeCalc().

Eu gostaria de multiplicar meus lotes com o 'MartingaleAmount' se meu último negócio fosse um perdedor. Se meu último negócio fosse um vencedor, eu gostaria de usar o tamanho de lote 'normal'. Infelizmente, quando faço o backtest da EA, recebo o erro 4051 da revista.

Tem algo a ver com os lotes, porque a EA funciona quando tento executar a EA sem a função "LotsizeCalc()".

Alguém sabe por que minha função lotsize não funciona?

Agradecemos antecipadamente,

Thierry

extern int MaximumTrades = 10; extern double StopLoss=25; extern double TakeProfit=50; extern double MartingaleAmount = 1.5; input double LotSize=0.1; int magic; double pips; int tradeNumber; string ScreenComment; double martinlot; double martinsize;

[/PHP]

double LotsizeCalc() { if(OrderSelect(lastTradeTicket(),MODE_HISTORY)) if(OrderProfit()<0 && tradeNumber 0){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ sl = OrderOpenPrice()+(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()-(TakeProfit*pips); if(OrderType()==OP_BUY){ sl = OrderOpenPrice()-(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()+(TakeProfit*pips); } if(!OrderModify(ticket,price,sl,tp,0,Magenta)) { err = GetLastError(); Print("Encountered an error during modification!"+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to select the order for some reason Print("Failed to Select Order ",ticket); err = GetLastError(); Print("Encountered an error while seleting order "+(string)ticket+" error number "+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to place the order and send us back a ticket number. err = GetLastError(); Print("Encountered an error during order placement!"+(string)err+" "+ErrorDescription(err) ); if(err==ERR_TRADE_NOT_ALLOWED)MessageBox("You can not place a trade because \"Allow Live Trading\" is not checked in your options. Please check the \"Allow Live Trading\" Box!","Check Your Settings!"); } }

Thierry

Você pode usar esta função para descobrir se a última ordem fechada foi fechada com lucro ou prejuízo :

[dobro lastOrderProfit(int magicNumber=0)

{

data/hora últimaTempo = 0;

últimoLucro duplo = 0;

for(int i=OrdensHistóriaTotal()-1; i>=0; i--)

{

se (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)===falso) quebra;

if (magicNumber!=0)

se (OrderMagicNumber() != magicNumber) continuar;

se (OrderSymbol() != Symbol()) continuar;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderComission();

}

return(lastProfit);

}

Basta verificar se o resultado da função lastOrderProfit(), e se for < 0, então aplique sua regra de martingale

 

Olá Mladen! Eu novamente...

Como seria possível usar as linhas deste indicador em uma EA usando iCustom, já que não parece haver nenhum amortecedor definido para estas linhas?

Obrigado

Arquivos anexados:
 
Jason2005:
Olá Mladen! Eu novamente...

Como seria possível utilizar as linhas deste indicador em uma EA usando iCustom, já que não parece haver nenhum amortecedor definido para estas linhas?

Obrigado

Esses são objetos

Você pode acessar objetos pelo nome (você deve saber o nome exato do objeto, mas o indicador deve estar ativo no gráfico e esses objetos devem ser desenhados no gráfico).

 
mladen:
Esses são objetos Você pode acessar objetos pelo nome (você deve saber o nome exato do objeto, mas o indicador deve estar ativo no gráfico e esses objetos devem ser desenhados no gráfico).

Ótimo. Então, como eu chamaria o indicador da EA? Com algo diferente do iCustom ou tenho tudo errado... Obrigado mladen

 
Jason2005:
Ótimo. Então, como eu chamaria o indicador da EA? Com algo diferente do iCustom ou tenho tudo errado... Obrigado mladen

Esse indicador simplesmente desenha níveis a 0,20,50,80 pips de cada segmento de 100 pips. A maneira mais simples é verificar se esses níveis são cruzados a partir de sua EA.

Se você tentar usar nomes de objetos (e seus preços, você não será capaz de saber os nomes exatos das linhas, uma vez que elas dependem do mais alto alto e do mais baixo - elas são objeto de mudança. Use o modo descrito acima

 
mladen:
Esse indicador simplesmente desenha níveis a 0,20,50,80 pips de cada segmento de 100 pips. A maneira mais simples é verificar se esses níveis são cruzados a partir de sua EA. Se você tentar usar nomes de objetos (e seus preços, você não será capaz de saber os nomes exatos das linhas, uma vez que elas dependem da maior alta e da menor baixa - elas estão sujeitas a mudanças. Use o modo descrito acima

Você teria um exemplo de como fazer isso... Desculpe-me por perguntar tanto, só estou começando com a codificação e não tenho o jeito de verificar se esses níveis estão cruzados na condição de comprar ou vender.

 
Jason2005:
Você teria um exemplo de como fazer isso... Desculpe-me por perguntar tanto, só estou começando com a codificação e não tenho o jeito de verificar se esses níveis estão cruzados na condição de comprar ou vender.

Jason2005

Você tem um código de como ele é feito no indicador que você anexou

 
mladen:
Jason2005 Você tem um código de como ele é feito no indicador que você anexou

Seria isto então?

MathMod(i, 5) == 0,0
 
mladen:
Thierry

Você pode usar esta função para descobrir se a última ordem fechada foi fechada com lucro ou prejuízo :

double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Basta verificar se o resultado da função lastOrderProfit(), e se for < 0, então aplique sua regra de martingale


Olá Mladen,

Obrigado por sua resposta.

A função lastorderprofit não é necessária porque minha função lastTradeTicket() faz o mesmo trabalho.

Você poderia por favor dar uma olhada em meu EA?

Não estou lhe pedindo para editar o código, mas eu ficaria muito grato se você pudesse me dizer o que eu codifiquei errado.

Obrigado de antemão,

Thierry

53_martingale.mq4

Arquivos anexados: