Группа "Стол заказов MQL"

Рейтинг 2087



РЕКОМЕНДУЮ



здравствуйте вы мне можете помоч написать Stop loss к тейк трофиту. или к нему же трэйлинг стоп в готовый советник

здравствуйте нужно написать стоп лосс к открываемым ордерам. чтобы с каждым ордером открывался новый стоп. либо TrailingStop со TrailingStep вместе. суть в меньшем убытке сделки. но с советника удалять присутствующие функциии ненадо.SEREGAKOT.mq 4 (0 Kb)
  • 0
  • Просмотров: 3885
  • 12 мая 2015, 16:16
  • prostokot
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник ATS-v2
Следующая запись в группе  
Советник по сигналам индикатора
12 мая 2015
12 мая 2015

Комментарии (35)

+
0
extern double Lot1=0.1;
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)
{
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 12 мая 2015, 16:20
+
0
Как только уместился код? :)  Посмотрю сегодня что можно сделать.
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 12 мая 2015, 16:23
+
0
вы несмотрели? а то я попробывал изменить у меня вообще бред только со стопами получился:D 
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 12 мая 2015, 22:16
+
0
завтра добавлю
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 12 мая 2015, 22:18
+
0
:) 
ну вот эта часть же необязательной была?
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);
}
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 12 мая 2015, 16:41
+
0
ну вот эта часть же необязательной была?

В нашем деле все пригодится! :)  Собрал все в кучу, завтра поправлю ошибки и добавлю стопы
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 12 мая 2015, 22:15
+
0
спасибо:)  извените я эту смс невидел просто никогда на форумах необщался
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 12 мая 2015, 22:19
+
0
трал надеюсь тоже получится
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 12 мая 2015, 22:20
+
0
:)  большее спасибо что вообще взялись помоч
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 12 мая 2015, 22:41
+
0
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 12 мая 2015, 16:49
+
0
Поправил ошибки, добавил стопы, функцию трала(она пока нигде не используется)

www.opentraders.ru/downloads/724/

avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 13 мая 2015, 08:42
+
0
немогу понять. в нигде неиспользуется? это как?
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 11:12
+
0
также как и некоторые другие функции у вас в советнике :) 
Опишите работу советника? Похоже что вам нужен трал по профиту для обеих пар?
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 13 мая 2015, 11:25
+
0
как описать? ) 2 ордера открываются по достижению до них цены как положено отложенным ордерам. и при достижения тейк профита открыквется новый ордер. а преведущий закрывается.и так все время а проблема стоит в последнем из очереди открытых ордеров с нарастающим отрицательном значении который идет в убыток именно на последние ордера нужен стоп. а не на весь советник.
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:16
+
0
просто мы изучали паскаль а у меня по нему знаний немного. вот со справочником и другими советниками пытаюсь состыковывать
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:18
+
0
да вы правы хоть стоп, хоть трал по профиту.
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:20
+
0
на оба ордера. а ках их туда написать у меня в голове неукладывается
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:22
+
0
Я делал здесь заказ для Anatoly74 там нужно было тоже стопы на крайние ордера навесить. Но не найду никак где именно топик. Помню у меня это тоже не сразу получилось.
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 13 мая 2015, 14:44
+
0
так я под стопы переделывал. получился бред
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:48
+
0
extern double Lot1=0.1;
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);
}
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:50
+
0
а однагрупник скоро с ним с ума сойдет:D 
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:51
+
0
Вот это код. Только у меня там в БУ кроет а вам нужно стопы выставить:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(OrdersTotal()<1){PutBuyLimitCountOrders();}
   if(CountTrades()==10 && BuOrdersProfit()>0) {CloseBuOrders();}
   Comment("\nBu Orders Profit: ",BuOrdersProfit(),
           "\nOpen Position: ",CountTrades());
  }      
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void PutBuyLimitCountOrders()
  {
     for(int i=1;i<=10;i++)
      {           
       int ticket=OrderSend(Symbol(),OP_BUYLIMIT,0.2,Ask-(i*100*Point),3,
                                                     Ask-(i*100*Point)-2000*Point,
                                                     Ask-(i*100*Point)+2000*Point,"",111,0,Blue);
      }       
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double BuOrdersProfit()
  {
   double all=0;
   for(int i=OrdersTotal()-1;i>=7;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==111)
        {
         if(OrderType()==OP_BUY)
          {
           all+=OrderProfit();
          }
        }
      }
    }   
   all=NormalizeDouble(all,Digits);
   return(all);
  } 
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double CloseBuOrders()
  {
   double all=0;
   bool cl;
   for(int i=OrdersTotal()-1;i>=7;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==111)
        {
         if(OrderType()==OP_BUY)
          {
           cl=OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
          }  
        }
      }
    }   
   all=NormalizeDouble(all,Digits);
   return(all);
  } 
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==111)
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 13 мая 2015, 14:53
+
0
в каком смысле кроет? непешите мне на вы пожалуйста. я простой деревенский парень младше вас на 17 лет
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 14:58
+
0
Просто нужно будет заменить функция закрытия по БУ на выставление стопов.

Скажем у тебя открыто 10 ордеров по евре и 10 по фунту. С какого количества ордеров, например с 5 по каждой паре нужно стопить крайние скажем 3?
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 13 мая 2015, 15:41
+
0
ооо я вообще в коде запутался*wall* 
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 16:26
+
0
Или стопим тем ордера у которых убыток превысил заданное значение?
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 13 мая 2015, 16:38
+
0
ну в принципе можно и так попробывать.
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 17:35
+
0
Сделал выставление стопа на ордер, при достижении определенного отрицательного значения в валюте депозита:




/////////////////////////////////////////////////////////////////////////вешаеи стоп на убыточный ордер
   for(i=0; i<OrdersTotal(); i++)
     {
      s=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        {
         if(OrderSymbol()==Symbol1 && OrderMagicNumber()==Magic)
           {
            Comment("\n Order Profit ", OrderProfit());
            if(OrderProfit()<<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/010.gif' alt=' *shock* '> rderLoss)
              {
               if(OrderType()==OP_BUY)
                 {
                  ModifyOrder(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit());
                 }
               if(OrderType()==OP_SELL)
                 {
                  ModifyOrder(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit());
                 }
              }
           }

         if(OrderSymbol()==Symbol2 && OrderMagicNumber()==Magic)
           {
            Comment("\n Order Profit ", OrderProfit());
            if(OrderProfit()<<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/010.gif' alt=' *shock* '> rderLoss)
              {
               if(OrderType()==OP_BUY)
                 {
                  ModifyOrder(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit());
                 }
               if(OrderType()==OP_SELL)
                 {
                  ModifyOrder(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit());
                 }
              }
           }
        }
     }
/////////////////////////////////////////////////////////////////////////
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 14 мая 2015, 10:07
+
0
как по вашему это норм советник?

avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 14 мая 2015, 11:26
+
0
Это только функция одна для наглядности. Советник обновил в базе: www.opentraders.ru/downloads/724/
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 14 мая 2015, 11:39
+
0
тоесть неполучится к профиту цепануть стапы. (  да?
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 14 мая 2015, 13:47
+
0
Что конкретно нужно сделать?
1. Трал по эквити
2. Тейк по эквити
3. Тейк по профиту в валюте
4. Трал по по профиту в валюте
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 14 мая 2015, 14:49
+
0
воот смотрите дапустим цена идет вверх открывается ордер на бай. и патом цепляет ордер на сэл и идет опять вверх. ордера на бай у нас последовательно закрываются по тейк профиту. и выручка берется на счет а ордер на сел уходит в минус. значит нужен на нее стоп. и так же на другой ордер. тоесть дохад в + а убытак минимизируем.
Редактирован: 14 мая 2015, 19:50
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 14 мая 2015, 19:50
+
0
я уже месяц вожусь над тем чтобы на том что я вам скидывал изначально. ну назавем исходник у которого цена фиксируется при тейк профите. и идет в отрицательную сторону на другой ордер на бай. сэл чтоб закрывался. при небольшем убытке по последнему TP с каждого ордера будь то бай либо сэл
Редактирован: 14 мая 2015, 20:15
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 14 мая 2015, 20:11
+
0
по крайней мере у меня так неполучается. чтобы после тэйк профита были стопы.
avatar

  3  prostokot Автор Сообщений: 63 - Сергей

  • 13 мая 2015, 17:38

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари