Trader3000: Awesome!!!!!! Спасибо большое за это. После многих недель все работает. Я многому научился. Спасибо всем!!!
Извините, но я заговорил слишком рано. Трейлингстоп срабатывает только иногда, поэтому я думаю, что код все еще где-то сломан. Вот весь советник. Кто-нибудь, пожалуйста, проверьте и дайте мне знать, если вы заметите ошибку. Спасибо.
#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
}
Большое спасибо, что указали на это. Я исправил ошибку, и теперь все работает. У меня еще один вопрос. Я пытаюсь сделать так, чтобы сообщение появлялось, когда мой стоплосс меньше, чем STOP_LEVEL брокера, но оно появляется даже тогда, когда он больше. Я пытался поместить его в раздел 'start', а не в раздел 'init', но и там оно не работает. Кто-нибудь, пожалуйста, посмотрите и дайте мне знать, что не так. Спасибо.
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);
}
Привет всем, я снова столкнулся с проблемой. Это очень странно, и я не могу понять, почему это происходит. Как я упоминал выше, советник работал нормально, но теперь я просто хочу перейти от этого
Спасибо за ваш ответ, но я не понимаю. Код для трейлинг-стопа находится здесь
{
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))
Если у меня есть стоплосс, советник работает, трейлингстоп и хедж срабатывают, но если я меняю стоплосс на 0, ничего не работает. Я не понимаю, как и почему стоплосс может влиять на трейлингстоп и хедж?
Да, вы должны повторно выбрать ордер.
В приведенном выше коде вы создаете новую переменную для хранения номера билета, затем вы можете выбрать сделку по номеру билета
Да, вы должны повторно выбрать ордер.
В приведенном выше коде вы создаете новую переменную для хранения номера билета, затем вы можете выбрать сделку по номеру билета
Awesome!!!!!! Спасибо большое за это. После многих недель все работает. Я многому научился. Спасибо всем!!!
Извините, но я заговорил слишком рано. Трейлингстоп срабатывает только иногда, поэтому я думаю, что код все еще где-то сломан. Вот весь советник. Кто-нибудь, пожалуйста, проверьте и дайте мне знать, если вы заметите ошибку. Спасибо.
,
,
Большое спасибо, что указали на это. Я исправил ошибку, и теперь все работает. У меня еще один вопрос. Я пытаюсь сделать так, чтобы сообщение появлялось, когда мой стоплосс меньше, чем STOP_LEVEL брокера, но оно появляется даже тогда, когда он больше. Я пытался поместить его в раздел 'start', а не в раздел 'init', но и там оно не работает. Кто-нибудь, пожалуйста, посмотрите и дайте мне знать, что не так. Спасибо.
if ((StopLoss || Stoploss || TrailingStop) < stoplevel)не имеет смысла
Вы имеете в виду?
if ((StopLoss < stoplevel || TrailingStop) < stoplevel)не имеет смысла
Вы имеете в виду?
Привет всем, я снова столкнулся с проблемой. Это очень странно, и я не могу понять, почему это происходит. Как я упоминал выше, советник работал нормально, но теперь я просто хочу перейти от этого
на
Я не трогаю ничего другого, но после этого простого изменения ни трейлинг-стоп, ни хедж не срабатывают. Это странно. Полный код приведен выше
Спасибо за ваш ответ, но я не понимаю. Код для трейлинг-стопа находится здесь
{ 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))Если у меня есть стоплосс, советник работает, трейлингстоп и хедж срабатывают, но если я меняю стоплосс на 0, ничего не работает. Я не понимаю, как и почему стоплосс может влиять на трейлингстоп и хедж?