Trader3000: Awesome!!!!!! Muito obrigado por isso. Depois de muitas semanas tudo está funcionando. Aprendi muito, obrigado a todos!!!
Desculpe, mas falei cedo demais. O Trailingstop só entra em ação às vezes, então acho que o código ainda está quebrado em algum lugar. Aqui está a EA inteira. Alguém por favor verifique e me avise se você detectar um erro. Obrigado
#define magicNumber 12345// Kicks in when position reaches at least TrailingStop pips of profit.externstring Label_Trailingstart = "Pip threshold to activate Trailing stop";
externdouble TrailingStart = 10;
externstring Label_Trailingstop = "Pips trailing behind";
externdouble TrailingStop = 5;
//Set it to some value above 0 to activate Hedgeexterndouble Hedge = 10;
externdouble Multiplier = 3;
externstring Label_StopLoss = "Set StopLoss of original trade";
externdouble StopLoss = 11;
externstring Label_Stoploss1 = "Set Stoploss of Hedge trade";
externstring Label_Stoploss2 = "Value should be less than 'Hedge'";
externstring Label_Stoploss3 = "otherwise a second Hedge trade will open";
externdouble Stoploss = 9;
externstring Label_Percentage = "Lotsize percentage of Equity";
externdouble Percentage = 1;
externdouble Lotsize = 0.01;
int i, result, total;
double stoplevel;
int init()
{
stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; // get broker's stoplevelif(StopLoss<=stoplevel) StopLoss=stoplevel; // we compare our StopLoss withif(Stoploss<=stoplevel) Stoploss=stoplevel; // stoplevel and adjust it when error occuredif(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop; // we compared our TakeProfit// as we compared our StopLossif ((StopLoss || Stoploss || TrailingStop) < stoplevel)
{
MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
"\nand/or TrailingStop are below the minimum levels"+
"\nrequired by your broker, they will automatically"+
"\nbe increased to "+StringConcatenate(stoplevel));
}
return(0);
}
int deinit()
{
return(0);
}
int start()
{
//double Lots = NormalizeDouble(AccountEquity()*Percentage*Lotsize/100, 2);int buy_ticket=0;
int sell_ticket=0;
total=0;
for(i = OrdersTotal()-1; i >= 0 ; i--)
if ( OrderSelect(i, SELECT_BY_POS)
&& OrderMagicNumber() == magicNumber
&& OrderSymbol() == Symbol())
{
total++;
if(OrderType()==OP_BUY)
buy_ticket=OrderTicket();
if(OrderType()==OP_SELL)
sell_ticket=OrderTicket();
}
if(total==0 && Close[1]>Close[2])
{
result=OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, Ask - StopLoss*Point*10, 0, "Original", magicNumber, 0, Blue);
Print("Error setting Original order: ",GetLastError());
}
if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Blue))
Print("Error setting Buy trailing stop: ",GetLastError());
}
}
elseif (OrderOpenPrice() > Bid + NormalizeDouble(Hedge*Point*10,Digits))
if(total == 1)
{
result=OrderSend(Symbol(), OP_SELL, NormalizeDouble(OrderLots() * Multiplier, 2), Bid, 3,
Bid + Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Blue);
Print("Error setting Sell Hedge: ", GetLastError());
}
}
elseif (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() > Ask + NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Ask + NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Red))
Print("Error setting Sell trailing stop: ",GetLastError());
}
}
elseif (OrderOpenPrice() < Ask - NormalizeDouble(Hedge*Point*10,Digits))
if(total == 1)
{
result=OrderSend(Symbol(), OP_BUY, NormalizeDouble(OrderLots() * Multiplier, 2), Ask, 3,
Ask - Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Red);
Print("Error setting Buy Hedge: ", GetLastError());
}
}
return(0);
}
if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY)
{
//Code
}
elseif (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
{
//If there is an open buy order code here will not be executed//The else is not necessary
}
Muito obrigado por apontar isso. Eu consertei o erro e seu funcionamento agora. Tenho outra pergunta. Estou tentando que a caixa de mensagens apareça quando meu stop_LEVEL é menor que o STOP_LEVEL do corretor, mas ela aparece mesmo quando é mais. Tentei colocá-la na seção 'start' em vez de 'init', mas ela também não funciona lá. Alguém pode dar uma olhada e me informar o que está errado. Obrigado
int init()
{
stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; // get broker's stoplevelif(StopLoss<=stoplevel) StopLoss=stoplevel; // we compare our StopLoss withif(Stoploss<=stoplevel) Stoploss=stoplevel; // stoplevel and adjust it when error occuredif(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop; // we compared our TakeProfit// as we compared our StopLossif ((StopLoss || Stoploss || TrailingStop) < stoplevel)
{
MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
"\nand/or TrailingStop are below the minimum levels"+
"\nrequired by your broker, they will automatically"+
"\nbe increased to "+StringConcatenate(stoplevel));
}
return(0);
}
Oi Pessoal, encontrei novamente um problema. É muito estranho e não consigo entender porque isso está acontecendo. Como mencionei acima, a EA funcionou bem, mas agora eu simplesmente quero mudar
Obrigado por sua resposta, mas não entendo. O código para o Trailing Stop está aqui
{
if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Blue))
Se eu tiver um Stoploss, o EA funciona e o Trailingstop e o sebe faz efeito, mas se eu mudar o Stoploss para 0, nada funciona. Não vejo como e por que o Stoploss teria qualquer influência sobre o Trailingstop e o sebe?
Sim, você tem que re-selecionar o pedido
Com o código acima, você cria uma nova variável para armazenar o número do bilhete, depois você pode selecionar o comércio por seu número de bilhete
Sim, você tem que re-selecionar o pedido
Com o código acima, você cria uma nova variável para armazenar o número do bilhete, depois você pode selecionar o comércio por seu número de bilhete
Awesome!!!!!! Muito obrigado por isso. Depois de muitas semanas tudo está funcionando. Aprendi muito, obrigado a todos!!!
Desculpe, mas falei cedo demais. O Trailingstop só entra em ação às vezes, então acho que o código ainda está quebrado em algum lugar. Aqui está a EA inteira. Alguém por favor verifique e me avise se você detectar um erro. Obrigado
,
,
Muito obrigado por apontar isso. Eu consertei o erro e seu funcionamento agora. Tenho outra pergunta. Estou tentando que a caixa de mensagens apareça quando meu stop_LEVEL é menor que o STOP_LEVEL do corretor, mas ela aparece mesmo quando é mais. Tentei colocá-la na seção 'start' em vez de 'init', mas ela também não funciona lá. Alguém pode dar uma olhada e me informar o que está errado. Obrigado
if ((StopLoss || Stoploss || TrailingStop) < stoplevel)não faz sentido
você quer dizer?
if ((StopLoss < stoplevel || TrailingStop) < stoplevel)não faz sentido
você quer dizer?
Oi Pessoal, encontrei novamente um problema. É muito estranho e não consigo entender porque isso está acontecendo. Como mencionei acima, a EA funcionou bem, mas agora eu simplesmente quero mudar
para
Não estou tocando em mais nada, mas depois desta simples mudança nem a Trailing stop nem a sebe é acionada. É estranho. O código completo está acima
Obrigado por sua resposta, mas não entendo. O código para o Trailing Stop está aqui
{ if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits)) { if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits)) { if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits), OrderTakeProfit(), Blue))Se eu tiver um Stoploss, o EA funciona e o Trailingstop e o sebe faz efeito, mas se eu mudar o Stoploss para 0, nada funciona. Não vejo como e por que o Stoploss teria qualquer influência sobre o Trailingstop e o sebe?