Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не знаешь язык собеседника? Функция автоматического перевода тебе поможет!
Alexey Konin
135
Alexey Konin 2011.04.15 12:09 
Кто может помочь? Нужен трейлинг стоп, который ставит для buy стоп на LOW предыдущей свечи. Для sell ставит на HI предыдущей свечи. При закрытии 0 свечи, переносит для sell на hi стоп, для buy на low. Если слишком близко, то оставляет на текущем уровне. Ждем другой свечи, если возможно то переносим. Если нет, то опять ждем.
o_O
Модератор
23614
o_O 2011.04.15 12:11  
Syte:
Кто может помочь? Нужен трейлинг стоп, который ставит для buy стоп на LOW предыдущей свечи. Для sell ставит на HI предыдущей свечи. При закрытии 0 свечи, переносит для sell на hi стоп, для buy на low. Если слишком близко, то оставляет на текущем уровне. Ждем другой свечи, если возможно то переносим. Если нет, то опять ждем.
в каком виде нужен?
Alexey Konin
135
Alexey Konin 2011.04.15 12:15  
Я хочу вставить функцию трала, в советник. В конце кода советника. Трал написал, но он не такой, какой нужен. Поставил обычный, который тралит, после входа в прибыль на N пунктов. Вообщем нужен код трала, по выше указанному условию, для вставки в советника.
o_O
Модератор
23614
o_O 2011.04.15 12:57  
//------------------------------------------------------------------ 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());
        }
}


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

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

Alexey Konin
135
Alexey Konin 2011.04.15 13:17  

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

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);
}
//+------------------------------------------------------------------+
Dmitry Chepik
3431
Dmitry Chepik 2011.04.15 13:22  
Профессиональная работа :)
Alexey Konin
135
Alexey Konin 2011.04.15 13:24  
chepikds:
Профессиональная работа :)

С меня программист, как с собаки балерина. Я по ТЗ собираю своего советника, и все по учебнику, уже запарился. Неделю собирал все в кучу. Теперь нашел, что нужно переделать трал, но не знаю как это сделать. Обычный сделал, а вот с другим мозгов не хватает. :(
gisip
325
gisip 2011.04.15 13:25  
Вы само сообщение об ошибке забыли указать.
Dmitry Chepik
3431
Dmitry Chepik 2011.04.15 13:26  
gisip:
Вы само сообщение об ошибке забыли указать.
что за ашипка?
Alexey Konin
135
Alexey Konin 2011.04.15 13:33  
'(' - 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)


Alexey Konin
135
Alexey Konin 2011.04.15 13:40  
Все ошибки ссылаются на новый код.
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий