здравствуйте нужно написать стоп лосс к открываемым ордерам. чтобы с каждым ордером открывался новый стоп. либо TrailingStop со TrailingStep вместе. суть в меньшем убытке сделки. но с советника удалять присутствующие функциии ненадо.
SEREGAKOT.mq 4 (0 Kb)
Комментарии (35)
extern double Lot2=0.1;
extern string Symbol1=«EURUSD»;
extern string Symbol2=«GBPUSD»;
extern int TP=20;
extern int ProfitClose=10;
extern int MaxOrders=3;
extern int Magic=777;
/////////////////////////////////////////////////////////////////////////
int D,i,y,i1,i2;
string Name;
double Ask1,Bid1,Ask2,Bid2;
int Nom[];
int Pairs;
int Ticket1,Ticket2;
int TypeOrder;
double LotOrder;
string SymbolOrder;
int init()
{
D=1;
if (Digits==5 || Digits==3)D=10;
Name=WindowExpertName();
ArrayResize(Nom,100);
return(0);
}
/////////////////////////////////////////////////////////////////////////
int start()
{
Ask1=NormalizeDouble(MarketInfo(Symbol1,MODE_ASK),MarketInfo(Symbol1,MODE_DIGITS));
Bid1=NormalizeDouble(MarketInfo(Symbol1,MODE_BID),MarketInfo(Symbol1,MODE_DIGITS));
Ask2=NormalizeDouble(MarketInfo(Symbol2,MODE_ASK),MarketInfo(Symbol2,MODE_DIGITS));
Bid2=NormalizeDouble(MarketInfo(Symbol2,MODE_BID),MarketInfo(Symbol2,MODE_DIGITS));
/////////////////////////////////////////////////////////////////////////
int OB1,OS1,OB2,OS2,N;
int Ticket;
double ProfitAll;
Pairs=0;
ArrayInitialize(Nom,0);
for (i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol1 && OrderMagicNumber()==Magic)
{
if (OrderType()==0)
{
OB1++;
}
if (OrderType()==1)
{
OS1++;
}
ProfitAll+=OrderProfit();
}
if (OrderSymbol()==Symbol2 && OrderMagicNumber()==Magic)
{
if (OrderType()==0)
{
OB2++;
}
if (OrderType()==1)
{
OS2++;
}
ProfitAll+=OrderProfit();
}
for (int y=0; y<Pairs; y++)
{
if (Nom[y]==StrToInteger(OrderComment()))break;
}
if (y==Pairs){Nom[y]=StrToInteger(OrderComment());Pairs++;}
}
/////////////////////////////////////////////////////////////////////////
/*Comment (ProfPar(1),
"\n",ProfPar(2),
"\n",ProfPar(3),
"\n",ProfPar(4),
"\n",Pairs);*/
if (ProfitAll>=ProfitClose)
{
CloseMarket();
return(0);
}
/////////////////////////////////////////////////////////////////////////
if (OB1+OS1+OB2+OS2==0)
{
Ticket=OpenOrder(Symbol1,OP_BUY,Lot1,Ask1,0,0,«1»,Magic);
Ticket=OpenOrder(Symbol1,OP_SELL,Lot1,Bid1,0,0,«2»,Magic);
Ticket=OpenOrder(Symbol2,OP_BUY,Lot2,Ask2,0,0,«2»,Magic);
Ticket=OpenOrder(Symbol2,OP_SELL,Lot2,Bid2,0,0,«1»,Magic);
}
/////////////////////////////////////////////////////////////////////////
if (Pairs>0)
{
for( y=0;y<Pairs; y++)
{
if (ProfPar(Nom[y])>=TP)
{
FindTicket(Nom[y]);
Print (Ticket1," ",Ticket2);
OrderSelect(Ticket1,SELECT_BY_TICKET,MODE_TRADES);
TypeOrder=OrderType();LotOrder=OrderLots();SymbolOrder=OrderSymbol();
CloseOrder(Ticket1,LotOrder);
if (TypeOrder==0)
{
OB1--;
if (OS1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,Nom[y],Magic);
if (OB1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,NewNom(),Magic);
}
else
{
OS1--;
if (OB1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,Nom[y],Magic);
if (OS1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,NewNom(),Magic);
}
/////////////////////////////////////////////////
OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES);
TypeOrder=OrderType();LotOrder=OrderLots();SymbolOrder=OrderSymbol();
CloseOrder(Ticket2,LotOrder);
if (TypeOrder==0)
{
OB2--;
if (OS2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,Nom[y],Magic);
if (OB2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,NewNom(),Magic);
}
else
{
OS2--;
if (OB2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,Nom[y],Magic);
if (OS2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,NewNom(),Magic);
}
}
}
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
return(0);
}
/////////////////////////////////////////////////////////////////////////
int CloseMarket()
{
for (int j=0; j<OrdersTotal(); j++)
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
{
CloseOrder(OrderTicket(),OrderTicket());
j--;
}
}
return(0);
}
////////////////////////////////////////////////////////////////////////
double ProfPar(int nom)
{
double prof;
for (i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic && StrToInteger(OrderComment())==nom)
{
if (OrderType()==0)prof=prof+(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
if (OrderType()==1)prof=prof+(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);
}
}
return (prof/D);
}
/////////////////////////////////////////////////////////////////////////////
int FindTicket(int nom)
{
Ticket1=0;Ticket2=0;
for (i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic && StrToInteger(OrderComment())==nom)
{
if (Ticket1==0) {Ticket1=OrderTicket();continue;}
if (Ticket1>0) {Ticket2=OrderTicket();break;}
}
}
}
/////////////////////////////////////////////////////////////////////////////
int NewNom()
{
for (i1=1; i1<100; i1++)
{
for (i2=0; i2<Pairs;i2++)
{
if (Nom[i2]==i1) break;
}
if (i2==Pairs)return (i1);
}
}
/////////////////////////////////////////////////////////////////////////////
int OpenOrder(string symbol,int cmd,double volume,double price,double stoploss,double takeprofit,string comment,int magic)
{
int err,i,ticket;
while(i<10)
{
RefreshRates ();
if(cmd==0) price=NormalizeDouble(MarketInfo(symbol,MODE_ASK),MarketInfo(symbol,MODE_DIGITS));
if(cmd==1) price=NormalizeDouble(MarketInfo(symbol,MODE_BID),MarketInfo(symbol,MODE_DIGITS));
ticket=OrderSend(symbol,cmd,volume,price,3*D,stoploss,takeprofit,comment,magic);
err = GetLastError();
if (err == 0) break;
Print(Name,Symbol(),Error(err)," при открытии ордера");
Print (price);
Sleep(1000);
i++;
}
return(ticket);
}
/////////////////////////////////////////////////////////////////////////////
int CloseOrder(int ticket, double lots)
{
int err,i1,cmd;
string symbol;
double price;
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
cmd=OrderType();
symbol=OrderSymbol();
if (lots<MarketInfo(Symbol(),MODE_MINLOT))lots=MarketInfo(Symbol(),MODE_MINLOT);
while(i1<10)
{
RefreshRates();
if(cmd==0) price=NormalizeDouble(MarketInfo(symbol,MODE_BID),MarketInfo(symbol,MODE_DIGITS));
if(cmd==1) price=NormalizeDouble(MarketInfo(symbol,MODE_ASK),MarketInfo(symbol,MODE_DIGITS));
if (OrderType()>1){OrderDelete(ticket);return(0);}
OrderClose(ticket,lots,price,3*D,CLR_NONE);
err = GetLastError();
if (err == 0) break;
Print(Name,Symbol(),Error(err)," при закрытии ордера");
Sleep(1000);
i1++;
}
return(0);
}
//////////////////////////////////////////////////////////////////////////////
int ModifyOrder(int ticket,double price,double stoploss,double takeprofit)
{
int err,i;
while(i<10)
{
RefreshRates();
OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),NormalizeDouble(takeprofit,Digits),0,CLR_NONE);
err = GetLastError();
if (err == 0) break;
Print(Name,Symbol(),Error(err)," при модификации ордера");
Sleep(1000);
i++;
}
return(0);
}
///////////////////////////////////////////////////////////////////////////////
string Error(int error_code)
{
string error_string;
switch(error_code)
{
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
ну вот эта часть же необязательной была?
case 0: error_string=«Нет ошибок»; break;
case 1: error_string=«Нет ошибки, но результат неизвестен»; break;
case 2: error_string=«Общая ошибка»; break;
case 3: error_string=«Неправильные параметры»; break;
case 4: error_string=«Торговый сервер занят»; break;
case 5: error_string=«Старая версия клиентского терминала»; break;
case 6: error_string=«Нет связи с торговым сервером»; break;
case 7: error_string=«Недостаточно прав»; break;
case 8: error_string=«Слишком частые запросы»; break;
case 9: error_string=«Недопустимая операция нарушающая функционирование сервера»; break;
case 64: error_string=«Счет заблокирован»; break;
case 65: error_string=«Неправильный номер счета»; break;
case 128: error_string=«Истек срок ожидания совершения сделки»; break;
case 129: error_string=«Неправильная цена»; break;
case 130: error_string=«Неправильные стопы»; break;
case 131: error_string=«Неправильный объем»; break;
case 132: error_string=«Рынок закрыт»; break;
case 133: error_string=«Торговля запрещена»; break;
case 134: error_string=«Недостаточно денег для совершения операции»; break;
case 135: error_string=«Цена изменилась»; break;
case 136: error_string=«Нет цен»; break;
case 137: error_string=«Брокер занят»; break;
case 138: error_string=«Новые цены»; break;
case 139: error_string=«Ордер заблокирован и уже обрабатывается»; break;
case 140: error_string=«Разрешена только покупка»; break;
case 141: error_string=«Слишком много запросов»; break;
case 145: error_string=«Модификация запрещена, так как ордер слишком близок к рынку»; break;
case 146: error_string=«Подсистема торговли занята»; break;
case 147: error_string=«Использование даты истечения ордера запрещено брокером»; break;
case 148: error_string=«Количество открытых и отложенных ордеров достигло предела, установленного брокером.»;break;
case 4000: error_string=«Нет ошибки»; break;
case 4001: error_string=«Неправильный указатель функции»; break;
case 4002: error_string=«Индекс массива — вне диапазона»; break;
case 4003: error_string=«Нет памяти для стека функций»; break;
case 4004: error_string=«Переполнение стека после рекурсивного вызова»; break;
case 4005: error_string=«На стеке нет памяти для передачи параметров»; break;
case 4006: error_string=«Нет памяти для строкового параметра»; break;
case 4007: error_string=«Нет памяти для временной строки»; break;
case 4008: error_string=«Неинициализированная строка»; break;
case 4009: error_string=«Неинициализированная строка в массиве»; break;
case 4010: error_string=«Нет памяти для строкового массива»; break;
case 4011: error_string=«Слишком длинная строка»; break;
case 4012: error_string=«Остаток от деления на ноль»; break;
case 4013: error_string=«Деление на ноль»; break;
case 4014: error_string=«Неизвестная команда»; break;
case 4015: error_string=«Неправильный переход»; break;
case 4016: error_string=«Неинициализированный массив»; break;
case 4017: error_string=«Вызовы DLL не разрешены»; break;
case 4018: error_string=«Невозможно загрузить библиотеку»; break;
case 4019: error_string=«Невозможно вызвать функцию»; break;
case 4020: error_string=«Вызовы внешних библиотечных функций не разрешены»; break;
case 4021: error_string=«Недостаточно памяти для строки, возвращаемой из функции»; break;
case 4022: error_string=«Система занята»; break;
case 4050: error_string=«Неправильное количество параметров функции»; break;
case 4051: error_string=«Недопустимое значение параметра функции»; break;
case 4052: error_string=«Внутренняя ошибка строковой функции»; break;
case 4053: error_string=«Ошибка массива»; break;
case 4054: error_string=«Неправильное использование массива-таймсерии»; break;
case 4055: error_string=«Ошибка пользовательского индикатора»; break;
case 4056: error_string=«Массивы несовместимы»; break;
case 4057: error_string=«Ошибка обработки глобальныех переменных»; break;
case 4058: error_string=«Глобальная переменная не обнаружена»; break;
case 4059: error_string=«Функция не разрешена в тестовом режиме»; break;
case 4060: error_string=«Функция не разрешена»; break;
case 4061: error_string=«Ошибка отправки почты»; break;
case 4062: error_string=«Ожидается параметр типа string»; break;
case 4063: error_string=«Ожидается параметр типа integer»; break;
case 4064: error_string=«Ожидается параметр типа double»; break;
case 4065: error_string=«В качестве параметра ожидается массив»; break;
case 4066: error_string=«Запрошенные исторические данные в состоянии обновления»; break;
case 4067: error_string=«Ошибка при выполнении торговой операции»; break;
case 4099: error_string=«Конец файла»; break;
case 4100: error_string=«Ошибка при работе с файлом»; break;
case 4101: error_string=«Неправильное имя файла»; break;
case 4102: error_string=«Слишком много открытых файлов»; break;
case 4103: error_string=«Невозможно открыть файл»; break;
case 4104: error_string=«Несовместимый режим доступа к файлу»; break;
case 4105: error_string=«Ни один ордер не выбран»; break;
case 4106: error_string=«Неизвестный символ»; break;
case 4107: error_string=«Неправильный параметр цены для торговой функции»; break;
case 4108: error_string=«Неверный номер тикета»; break;
case 4109: error_string=«Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.»; break;
case 4110: error_string=«Длинные позиции не разрешены. Необходимо проверить свойства эксперта.»; break;
case 4111: error_string=«Короткие позиции не разрешены. Необходимо проверить свойства эксперта.»; break;
case 4200: error_string=«Объект уже существует»; break;
case 4201: error_string=«Запрошено неизвестное свойство объекта»; break;
case 4202: error_string=«Объект не существует»; break;
case 4203: error_string=«Неизвестный тип объекта»; break;
case 4204: error_string=«Нет имени объекта»; break;
case 4205: error_string=«Ошибка координат объекта»; break;
case 4206: error_string=«Не найдено указанное подокно»; break;
default: error_string=«Ошибка при работе с объектом»;
}
return(error_string);
}
3 prostokot Автор Сообщений: 63 - Сергей
В нашем деле все пригодится! Собрал все в кучу, завтра поправлю ошибки и добавлю стопы
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
3 prostokot Автор Сообщений: 63 - Сергей
www.opentraders.ru/downloads/724/
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
Опишите работу советника? Похоже что вам нужен трал по профиту для обеих пар?
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
3 prostokot Автор Сообщений: 63 - Сергей
3 prostokot Автор Сообщений: 63 - Сергей
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
extern double Lot2=0.1;
extern string Symbol1=«EURUSD»;
extern string Symbol2=«GBPUSD»;
extern int TP=20;
extern int StopLoss=20;
extern int ProfitClose=10;
extern int MaxOrders=3;
extern int Magic=777;
/////////////////////////////////////////////////////////////////////////
int D,i,y,i1,i2;
string Name;
double Ask1,Bid1,Ask2,Bid2, sls, slb;
int Nom[];
int Pairs;
int Ticket1,Ticket2;
int TypeOrder;
double LotOrder;
string SymbolOrder;
int init()
{
D=1;
if (Digits==5 || Digits==3)D=10;
Name=WindowExpertName();
ArrayResize(Nom,100);
return(0);
}
/////////////////////////////////////////////////////////////////////////
int start()
{
Ask1=NormalizeDouble(MarketInfo(Symbol1,MODE_ASK),MarketInfo(Symbol1,MODE_DIGITS));
Bid1=NormalizeDouble(MarketInfo(Symbol1,MODE_BID),MarketInfo(Symbol1,MODE_DIGITS));
Ask2=NormalizeDouble(MarketInfo(Symbol2,MODE_ASK),MarketInfo(Symbol2,MODE_DIGITS));
Bid2=NormalizeDouble(MarketInfo(Symbol2,MODE_BID),MarketInfo(Symbol2,MODE_DIGITS));
/////////////////////////////////////////////////////////////////////////
int OB1,OS1,OB2,OS2,N;
int Ticket;
double ProfitAll;
Pairs=0;
ArrayInitialize(Nom,0);
for (i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol1 && OrderMagicNumber()==Magic)
{
if (OrderType()==0)
{
OB1++;
}
if (OrderType()==1)
{
OS1++;
}
ProfitAll+=OrderProfit();
}
if (OrderSymbol()==Symbol2 && OrderMagicNumber()==Magic)
{
if (OrderType()==0)
{
OB2++;
}
if (OrderType()==1)
{
OS2++;
}
ProfitAll+=OrderProfit();
}
for (int y=0; y<Pairs; y++)
{
if (Nom[y]==StrToInteger(OrderComment()))break;
}
if (y==Pairs){Nom[y]=StrToInteger(OrderComment());Pairs++;}
}
/////////////////////////////////////////////////////////////////////////
/*Comment (ProfPar(1),
"\n",ProfPar(2),
"\n",ProfPar(3),
"\n",ProfPar(4),
"\n",Pairs);*/
if (ProfitAll>=ProfitClose)
{
CloseMarket();
return(0);
}
/////////////////////////////////////////////////////////////////////////
if (OB1+OS1+OB2+OS2==0)
{
Ticket=OpenOrder(Symbol1,OP_BUY,Lot1,Ask1,Ask-StopLoss*_Point,0,«1»,Magic);
Ticket=OpenOrder(Symbol1,OP_SELL,Lot1,Bid1,Bid+StopLoss*_Point,0,«2»,Magic);
Ticket=OpenOrder(Symbol2,OP_BUY,Lot2,Ask2,Ask-StopLoss*_Point,0,«2»,Magic);
Ticket=OpenOrder(Symbol2,OP_SELL,Lot2,Bid2,Bid+StopLoss*_Point,0,«1»,Magic);
}
/////////////////////////////////////////////////////////////////////////
if (Pairs>0)
{
for( y=0;y<Pairs; y++)
{
if (ProfPar(Nom[y])>=TP)
{
FindTicket(Nom[y]);
Print (Ticket1," ",Ticket2);
OrderSelect(Ticket1,SELECT_BY_TICKET,MODE_TRADES);
TypeOrder=OrderType();LotOrder=OrderLots();SymbolOrder=OrderSymbol();
CloseOrder(Ticket1,LotOrder);
if (TypeOrder==0)
{
OB1--;
sls = Bid + StopLoss* Point;
slb = Ask — StopLoss* Point;
if (OS1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,sls,0,Nom[y],Magic);
if (OB1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,slb,0,NewNom(),Magic);
}
else
{
OS1--;
if (OB1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,slb,0,Nom[y],Magic);
if (OS1<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,sls,0,NewNom(),Magic);
}
/////////////////////////////////////////////////
OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES);
TypeOrder=OrderType();LotOrder=OrderLots();SymbolOrder=OrderSymbol();
CloseOrder(Ticket2,LotOrder);
if (TypeOrder==0)
{
OB2--;
if (OS2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,Nom[y],Magic);
if (OB2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,NewNom(),Magic);
}
else
{
OS2--;
if (OB2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,1,LotOrder,0,0,0,Nom[y],Magic);
if (OS2<=MaxOrders)Ticket=OpenOrder(SymbolOrder,0,LotOrder,0,0,0,NewNom(),Magic);
}
}
}
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
return(0);
}
/////////////////////////////////////////////////////////////////////////
int CloseMarket()
{
for (int j=0; j<OrdersTotal(); j++)
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
{
CloseOrder(OrderTicket(),OrderTicket());
j--;
}
}
return(0);
}
////////////////////////////////////////////////////////////////////////
double ProfPar(int nom)
{
double prof;
for (i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic && StrToInteger(OrderComment())==nom)
{
if (OrderType()==0)prof=prof+(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
if (OrderType()==1)prof=prof+(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);
}
}
return (prof/D);
}
/////////////////////////////////////////////////////////////////////////////
int FindTicket(int nom)
{
Ticket1=0;Ticket2=0;
for (i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==Magic && StrToInteger(OrderComment())==nom)
{
if (Ticket1==0) {Ticket1=OrderTicket();continue;}
if (Ticket1>0) {Ticket2=OrderTicket();break;}
}
}
}
/////////////////////////////////////////////////////////////////////////////
int NewNom()
{
for (i1=1; i1<100; i1++)
{
for (i2=0; i2<Pairs;i2++)
{
if (Nom[i2]==i1) break;
}
if (i2==Pairs)return (i1);
}
}
/////////////////////////////////////////////////////////////////////////////
int OpenOrder(string symbol,int cmd,double volume,double price,double stoploss,double takeprofit,string comment,int magic)
{
int err,i,ticket;
while(i<10)
{
RefreshRates ();
if(cmd==0) price=NormalizeDouble(MarketInfo(symbol,MODE_ASK),MarketInfo(symbol,MODE_DIGITS));
if(cmd==1) price=NormalizeDouble(MarketInfo(symbol,MODE_BID),MarketInfo(symbol,MODE_DIGITS));
ticket=OrderSend(symbol,cmd,volume,price,3*D,stoploss,takeprofit,comment,magic);
err = GetLastError();
if (err == 0) break;
Print(Name,Symbol(),Error(err)," при открытии ордера");
Print (price);
Sleep(1000);
i++;
}
return(ticket);
}
/////////////////////////////////////////////////////////////////////////////
int CloseOrder(int ticket, double lots)
{
int err,i1,cmd;
string symbol;
double price;
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
cmd=OrderType();
symbol=OrderSymbol();
if (lots<MarketInfo(Symbol(),MODE_MINLOT))lots=MarketInfo(Symbol(),MODE_MINLOT);
while(i1<10)
{
RefreshRates();
if(cmd==0) price=NormalizeDouble(MarketInfo(symbol,MODE_BID),MarketInfo(symbol,MODE_DIGITS));
if(cmd==1) price=NormalizeDouble(MarketInfo(symbol,MODE_ASK),MarketInfo(symbol,MODE_DIGITS));
if (OrderType()>1){OrderDelete(ticket);return(0);}
OrderClose(ticket,lots,price,3*D,CLR_NONE);
err = GetLastError();
if (err == 0) break;
Print(Name,Symbol(),Error(err)," при закрытии ордера");
Sleep(1000);
i1++;
}
return(0);
}
//////////////////////////////////////////////////////////////////////////////
int ModifyOrder(int ticket,double price,double stoploss,double takeprofit)
{
int err,i;
while(i<10)
{
RefreshRates();
OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),NormalizeDouble(takeprofit,Digits),0,CLR_NONE);
err = GetLastError();
if (err == 0) break;
Print(Name,Symbol(),Error(err)," при модификации ордера");
Sleep(1000);
i++;
}
return(0);
}
3 prostokot Автор Сообщений: 63 - Сергей
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
Скажем у тебя открыто 10 ордеров по евре и 10 по фунту. С какого количества ордеров, например с 5 по каждой паре нужно стопить крайние скажем 3?
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
1. Трал по эквити
2. Тейк по эквити
3. Тейк по профиту в валюте
4. Трал по по профиту в валюте
35 AM2 Сообщений: 16421 - Андрей
3 prostokot Автор Сообщений: 63 - Сергей
3 prostokot Автор Сообщений: 63 - Сергей
3 prostokot Автор Сообщений: 63 - Сергей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий