Трейлинг стоп. Нужна помощь.

 
Кто может помочь? Нужен трейлинг стоп, который ставит для buy стоп на LOW предыдущей свечи. Для sell ставит на HI предыдущей свечи. При закрытии 0 свечи, переносит для sell на hi стоп, для buy на low. Если слишком близко, то оставляет на текущем уровне. Ждем другой свечи, если возможно то переносим. Если нет, то опять ждем.
 
Syte:
Кто может помочь? Нужен трейлинг стоп, который ставит для buy стоп на LOW предыдущей свечи. Для sell ставит на HI предыдущей свечи. При закрытии 0 свечи, переносит для sell на hi стоп, для buy на low. Если слишком близко, то оставляет на текущем уровне. Ждем другой свечи, если возможно то переносим. Если нет, то опять ждем.
в каком виде нужен?
 
Я хочу вставить функцию трала, в советник. В конце кода советника. Трал написал, но он не такой, какой нужен. Поставил обычный, который тралит, после входа в прибыль на N пунктов. Вообщем нужен код трала, по выше указанному условию, для вставки в советника.
 
//------------------------------------------------------------------ TralPos
void TralPos(int magic, string smb, int tf, int b)
{
        for (int i=0; i<OrdersTotal(); i++) // проходим по всем ордерам и двигаем стопы
        {
                if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
                if (OrderMagicNumber()!=magic || OrderSymbol()!=smb) continue;
                int dir=OrderType(); if (dir!=OP_BUY && dir!=OP_SELL) continue;
                double csl=OrderStopLoss(); double cop=OrderOpenPrice(); double ctp=OrderTakeProfit();
                double apr=Bid; if (dir==OP_SELL) apr=Ask;
                double sl; double StopLvl=MarketInfo(smb, MODE_STOPLEVEL)*Point; 
                if (dir==OP_BUY) sl=iLow(smb, tf, b); else sl=iHigh(smb, tf, b);
                if (dir==OP_BUY) sl=MathMin(apr-StopLvl, sl); else sl=MathMax(apr+StopLvl, sl);
                sl=NormalizeDouble(sl, Digits);
                if ((dir==OP_BUY && (sl<cop || (sl<=csl && csl!=0)))
                        || (dir==OP_SELL && (sl>cop || (sl>=csl && csl!=0)))) continue;
                if (!OrderModify(OrderTicket(), cop, sl, ctp, 0)) Print("error "+GetLastError());
        }
}


это трал по Хай/Лоу.

Первый перенос будет выше цены открытия.

 

Не могу понять. Пишет ошибку. Может я не так что то делаю? Вот код, советника, с обычным тралом. При замене, обычного трала, пишет ошибку. Как от нее избавиться? Скорее всего пропустил, что то.

extern double TrailingStop = 20;
int cnt;
int ticket,Y;
datetime t;
bool eorder;
double tp,sl;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
int j;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol())
{
if (OrderType()==OP_SELLSTOP ||
OrderType()==OP_SELLLIMIT ||
OrderType()==OP_BUYSTOP ||
OrderType()==OP_BUYLIMIT)
OrderDelete(OrderTicket(), CLR_NONE);
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int j;
eorder=false;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol())
{
if (OrderType()==OP_SELLSTOP ||
OrderType()==OP_SELLLIMIT ||
OrderType()==OP_BUYSTOP ||
OrderType()==OP_BUYLIMIT ||
OrderType()==OP_BUY ||
OrderType()==OP_SELL)
{
eorder=true;
}
}
}
}
if (iBarShift(NULL,0,t)>0) Y=0;
if (eorder==false)
if ((TimeCurrent()-Time[0])<1)
{
if (Y==0)
{
if (Open[1]>Close[1])
{
//Медвежья свеча
sl=High[1]-Low[1];
tp=(High[1]-Low[1])-((High[1]-Low[1])*0.25);
ticket = OrderSend(Symbol(), OP_SELL, 1, NormalizeDouble(MarketInfo(Symbol(),MODE_BID), Digits), 3, NormalizeDouble(MarketInfo(Symbol(),MODE_ASK)+sl, Digits), NormalizeDouble(MarketInfo(Symbol(),MODE_BID)-tp, Digits), "My order Sell", 16384, 0, Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Sell order opened : ",OrderOpenPrice());
Print("SL : ",sl," TP: ",tp);
}
else
{
Print("Error opening Sell order : ",GetLastError());
}
}
else
{
//бычья свеча
sl=High[1]-Low[1];
tp=(High[1]-Low[1])-((High[1]-Low[1])*0.25);
ticket = OrderSend(Symbol(),OP_BUY, 1, NormalizeDouble(MarketInfo(Symbol(),MODE_ASK), Digits), 3, NormalizeDouble(MarketInfo(Symbol(),MODE_BID)-sl, Digits), NormalizeDouble(MarketInfo(Symbol(),MODE_ASK)+tp, Digits), "My order Sell", 16384, 0, Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
Print("SL : ",sl," TP: ",tp);
}
else
{
Print("Error opening BUY order : ",GetLastError());
}
}
Y=1;
t=TimeCurrent();
}
}
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
// check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
// check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
 
Профессиональная работа :)
 
chepikds:
Профессиональная работа :)

С меня программист, как с собаки балерина. Я по ТЗ собираю своего советника, и все по учебнику, уже запарился. Неделю собирал все в кучу. Теперь нашел, что нужно переделать трал, но не знаю как это сделать. Обычный сделал, а вот с другим мозгов не хватает. :(
 
Вы само сообщение об ошибке забыли указать.
 
gisip:
Вы само сообщение об ошибке забыли указать.
что за ашипка?
 
'(' - function definition unexpected C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (172, 13)
'i' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (174, 23)
'i' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (174, 40)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (174, 43)
'i' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (176, 34)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (176, 64)
'magic' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (177, 41)
'smb' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (177, 65)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (177, 68)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (178, 69)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (180, 49)
'smb' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (181, 54)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 32)
'smb' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 42)
'tf' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 47)
'b' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 51)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 52)
'smb' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 69)
'tf' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 74)
'b' - variable not defined C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 78)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (182, 79)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (183, 32)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (183, 60)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (183, 94)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (184, 46)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (186, 77)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (187, 65)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (187, 95)
')' - unbalanced right parenthesis C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (191, 12)
'}' - unbalanced parentheses C:\Program Files\Forex4you MetaTrader 4\experts\EasyTrade.mq4 (192, 3)


 
Все ошибки ссылаются на новый код.
Причина обращения: