Хочу модифицировать ордер

 

Здравствуйте. Не получается зделать трйлинг. Я уже писал мне ответили. Большое спасибо. Но сегодня даже хелповский MQL ный не могу поставить. Почему-то до модификации даже не доходит дело.

Вот код:

#property copyright "Chebur"
#property link ""

//---- input parameters
//extern int Time1;
//extern int Time2;
//extern int Magic = 02973;


extern int TrailStop = 15;
extern int StopLoss = 100;
extern int Koefficient = 6;
int Spread,Ticket,Normaling,BUY_new,SELL_new,Error,d,n,Magic;
double Max,t,Min,Pr,LOTSTEP,Obyem,Obyem1,ma,sar,LastBid,LastCheckPoint,Temp,SL;
bool res,Trail=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+

int init()
{
BUY_new=0;
SELL_new=0;
Magic=(TimeCurrent());
LOTSTEP=MarketInfo(Symbol(),MODE_MINLOT);
if(LOTSTEP==0.1) Normaling=1;
if(LOTSTEP==0.01) Normaling=2;
Obyem1=NormalizeDouble(AccountEquity()/(100000*Koefficient),Normaling);
if (MarketInfo(Symbol(),MODE_MINLOT)>Obyem1) Obyem=LOTSTEP; else Obyem=Obyem1;
return(0);
}

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(OrdersTotal()<1)
{
while (TimeDay(TimeCurrent())!=d)
{

// Comment(
// "Депозит________________",DoubleToStr(AccountEquity(),2)," ",
// TimeToStr(TimeCurrent()),"\n",
// "Magic__________________",Magic,"\n",
// "Плечо__________________1:",AccountLeverage(),"\n",
// "Предыдущий максимум__",Max,"\n",
// "Предыдущий минимум___",Min,"\n","\n",
// "Ширина канала________",(Max-Min)*10000);
if(BUY_new==0)
{
if(SELL_new==0)
{
while(true)
{
RefreshRates();
Ticket=OrderSend(Symbol(),OP_BUY,Obyem,Ask,3,Bid-Point*StopLoss,0,0,Magic,0,Blue);
BUY_new=1;
if (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер BUY ",Ticket);
break; // Продолжение

}
if (Fun_Error(GetLastError())==1) // Обработка ошибок
continue; // Повторная попытка
return; // Выход из start() при непреодолимой ошибки
}
}
}
}
}


if(Bid-OrderOpenPrice()>Point*TrailStop)
{
if(OrderStopLoss()<Bid-Point*TrailStop)
{
OrderModify(Ticket,OrderOpenPrice(),Bid-Point*TrailStop,0,0,Blue);
return(0);
}
}
BUY_new=0;
SELL_new=0;
d=TimeDay(TimeCurrent());

return(0);
}
////////////////////////////////////////


int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки
case 4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решение
return(1); // Выход из функции
case 135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данные
return(1); // Выход из функции
case 136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тика
Sleep(1); // Задержка в цикле
return(1); // Выход из функции
case 137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решение
return(1); // Выход из функции
case 146:Alert("Подсис тема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решение
return(1); // Выход из функции
// Критические ошибки
case 2: Alert("Общая ошибка.");
return(0); // Выход из функции
case 5: Alert("Старая версия терминала.");
return; // Больше не работать
return(0); // Выход из функции
case 64: Alert("Счет заблокирован.");
return; // Больше не работать
return(0); // Выход из функции
case 133:Alert("Торговля запрещена.");
return(0); // Выход из функции
case 134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функции
default: Alert("Возникла ошибка ",Error); // Другие варианты
return(0); // Выход из функции
}
}

 

Обрати внимание на эту строчку

return; // Выход из start() при непреодолимой ошибки
она не дает тебе что-либо делать.

 

То же самое. Убрал ВСЁ

#property copyright "Chebur"
#property link ""

//---- input parameters
//extern int Time1;
//extern int Time2;
//extern int Magic = 02973;


extern int TrailStop = 15;
extern int StopLoss = 100;
extern int Koefficient = 6;
int Spread,Ticket,Normaling,BUY_new,SELL_new,Error,d,n,Magic;
double Max,t,Min,Pr,LOTSTEP,Obyem,Obyem1,ma,sar,LastBid,LastCheckPoint,Temp,SL;
bool res,Trail=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+

int init()
{
BUY_new=0;
SELL_new=0;
Magic=(TimeCurrent());
LOTSTEP=MarketInfo(Symbol(),MODE_MINLOT);
if(LOTSTEP==0.1) Normaling=1;
if(LOTSTEP==0.01) Normaling=2;
Obyem1=NormalizeDouble(AccountEquity()/(100000*Koefficient),Normaling);
if (MarketInfo(Symbol(),MODE_MINLOT)>Obyem1) Obyem=LOTSTEP; else Obyem=Obyem1;
return(0);
}

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(OrdersTotal()<1)
{
while (TimeDay(TimeCurrent())!=d)
{
if(BUY_new==0)
{
if(SELL_new==0)
{
RefreshRates();
Ticket=OrderSend(Symbol(),OP_BUY,Obyem,Ask,3,Bid-Point*StopLoss,0,0,Magic,0,Blue);
BUY_new=1;
if (Ticket > 0)Alert ("Открыт ордер BUY ",Ticket);
}
}
}
}


if(Bid-OrderOpenPrice()>Point*TrailStop)
{
if(OrderStopLoss()<Bid-Point*TrailStop)
{
OrderModify(Ticket,OrderOpenPrice(),Bid-Point*TrailStop,0,0,Blue);
return(0);
}
}
BUY_new=0;
SELL_new=0;
d=TimeDay(TimeCurrent());

return(0);
}
////////////////////////////////////////

 
Перед тем как модифицировать, Вам надо выбрать нужный ордер OrderSelect() и определить его тикет.
 
double OrderOpenPrice( )
Возвращает цену открытия для выбранного ордера.
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
в справке много интересного!
Причина обращения: