Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Совершил прорыв? Напиши статью об этом и получи 200 USD!
balamytin
163
balamytin 2013.08.17 04:44 

ЛЮДИ ПОМОГИТЕ С ТРЕЙЛИНГОМ КАК ЕГО ФУНКЦИЮ В СТАРТ ПРАВИЛНО ВСТАВИТЬ ??

int start()

{

LotsSize();

if(OrdersTotal()<1&&isTradeTimeString("00:00","00:00"))

{

sliotk();

OrderSend(Symbol(),OP_SELLSTOP,Lots,OTKS,20,SLS+100*Point,OTKS-2*TPS,NULL,123,0,Red);

OrderSend(Symbol(),OP_BUYSTOP,Lots,OTKB,20,SLB-100*Point,OTKB+2*TPB,NULL,123,0,Green);



}



TrailingStairs(123,30,30);


if(OrdersTotal()==1)

{

TradeCloseAll();

}


if(isTradeTimeString("22:00","22:30"))

{

TradeCloseAll();

}

return(0);

}

ПЫТАЮСЬ КАК ТО ТАК НО НЕЧЕГО НЕ ВЫХОДИТ НЕ ТРЕЙЛИТ(

Alexander
2441
Alexander 2013.08.17 05:04  
Ну, ссылку вставил правильно. Теперь саму функцию покажи.
balamytin
163
balamytin 2013.08.17 05:07  
//+------------------------------------------------------------------+
//| ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ |
//| Функции передаётся тикет позиции, расстояние от курса открытия, |
//| на котором трейлинг запускается (пунктов) и "шаг", с которым он |
//| переносится (пунктов) |
//| Пример: при +30 стоп на +10, при +40 - стоп на +20 и т.д. |
//+------------------------------------------------------------------+

void TrailingStairs(int ticket,int trldistance,int trlstep)
{
double nextstair; // ближайшее значение курса, при котором будем менять стоплосс

// проверяем переданные значения
if ((trldistance<MarketInfo(Symbol(),MODE_STOPLEVEL)) || (trlstep<1) || (trldistance<trlstep) || (ticket==0) || (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)))
{
Print("Трейлинг функцией TrailingStairs() невозможен из-за некорректности значений переданных ей аргументов.");
return(0);
}
// если длинная позиция (OP_BUY)
if (OrderType()==OP_BUY)
{
// расчитываем, при каком значении курса следует скорректировать стоплосс
// если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()))
nextstair = OrderOpenPrice() + trldistance*Point;
// иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
else
nextstair = OrderStopLoss() + trldistance*Point;

// если текущий курс (Bid) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
if (Bid>=nextstair)
{
if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()) && (OrderOpenPrice() + trlstep*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
}
}
else
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
}
}
// если короткая позиция (OP_SELL)
if (OrderType()==OP_SELL)
{
// расчитываем, при каком значении курса следует скорректировать стоплосс
// если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()))
nextstair = OrderOpenPrice() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
// иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
else
nextstair = OrderStopLoss() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
// если текущий курс (Аск) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
if (Ask<=nextstair)
{
if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()) && (OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
}
}
else
{
if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()- (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
}
}
}
Alexander
2441
Alexander 2013.08.17 05:12  
Откуда ты знаешь, что тикет у ордера 123?
balamytin
163
balamytin 2013.08.17 05:26  

я почему то думал что тикет это маджик??? не так??

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий