А откуда такое убеждение, что СЛ даст этому советнику суперсилы, ведь код не ваш?
evillive:
А откуда такое убеждение, что СЛ даст этому советнику суперсилы, ведь код не ваш?
я думаю нужен трал по профиту для обеих пар, либо стоп по профиту для обеих пар . помоему все получится. либо стоп по профиту. а с кодом мудрил однакурсник я пытался переделать но увы неполучается.
А откуда такое убеждение, что СЛ даст этому советнику суперсилы, ведь код не ваш?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
поможете?
extern double Lot1=0.1;
extern double Lot2=0.1;
extern int TrailingStop = 30;
extern int TrailingStep = 10;
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)
{
TrailingStop *= 10;
TrailingStep *= 10;
}
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)
{
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);
}