Нужно чтобы открывались 4 новых ордера после того как из предыдущих 4х ордеров закроются 2 заранее выбранных ордера(SYMBOL1 и SYMBOL2 или SYMBOL3 и SYMBOL4). А 2 этих ордера(SYMBOL1 и SYMBOL2 или SYMBOL3 и SYMBOL4) закрываются при определенной сумме профита(SYMBOL1 + SYMBOL2 или SYMBOL3 + SYMBOL4) соответственно. то есть 4 ордера разделены на 2 пары (SYMBOL1 + SYMBOL2 и SYMBOL3 + SYMBOL4). если какие 2 определенных ордера выходят в профит, то закрываются и открывается новая 4ка ордеров. а которые за следом потом выйдут в профит 2 ордера, они не учитываются для открытия новой 4ки ордеров, а просто закрываются по профиту. и так по новой. начало самого первого открытия 4х ордеров начинается с момента установки советника на график.
Допустим открыты 4 ордера, это: buy EURUSD(-2$); sell GBPUSD(+12$); buy EURGBP(-6$); sell GBPJPY(-2$). Общий профит стоит 10$. Советник должен закрыть: buy EURUSD(-2$) и sell GBPUSD(+12$) (SYMBOL1 + SYMBOL2=общий профит)(SYMBOL3 + SYMBOL4= убыток. их пока не закрывает а ждет когда в профит выйдут).
//+------------------------------------------------------------------+//| Советник, выставляет 4 ордера по 4м валютам |//+------------------------------------------------------------------+#property strict//+------------------------------------------------------------------+externstring SYMBOL1 = "EURUSD"; //первый символ, если не указан, то не выставляетсяexternstring SYMBOL2 = "GBPUSD"; //второй символ, если не указан, то не выставляетсяexternstring SYMBOL3 = "EURGBP"; //третий символ, если не указан, то не выставляетсяexternstring SYMBOL4 = "GBPJPY"; //четвертый символ, если не указан, то не выставляетсяexterndouble LOT1 = 0.1; //лот первого инструментаexterndouble LOT2 = 0.1; //лот второго инструментаexterndouble LOT3 = 0.1; //лот третьего инструментаexterndouble LOT4 = 0.1; //лот четвертого инструментаexternint TYPE1 = OP_BUY; //тип ордера первого инструментаexternint TYPE2 = OP_SELL; //тип ордера второго инструментаexternint TYPE3 = OP_BUY; //тип ордера третьего инструментаexternint TYPE4 = OP_SELL; //тип ордера четвертого инструментаexternint Slippage = 30; //проскальзывание externdouble obpr = 10; //Общий профитexternint Magic = 777888;
//============================================================================void start()
{
double pa1=0, pa2=0;
int i;
int p1=0,p2=0;
for(i=OrdersTotal()-1; i>=0; i--)
{//Проверяем профитif(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic)
{//Подсчитываем общий профитif(p1<=2 && (OrderSymbol()==SYMBOL1 || OrderSymbol()==SYMBOL2)) {pa1=pa1+OrderProfit()+OrderSwap()+OrderCommission(); p1++;}
if(p2<=2 && (OrderSymbol()==SYMBOL3 || OrderSymbol()==SYMBOL4)) {pa2=pa2+OrderProfit()+OrderSwap()+OrderCommission(); p2++;}
}
}
if(pa1>=obpr) close_orders(1); //Закрываем две пары, если они в сумме >= общему профитуif(pa2>=obpr) close_orders(2);
int s=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic) s++;
}
if(s>2) return;
int Digit=(int)MarketInfo(SYMBOL1,MODE_DIGITS);
double Poin=MarketInfo(SYMBOL1,MODE_POINT);
double ASK=NormalizeDouble(MarketInfo(SYMBOL1,MODE_ASK),Digit);
double BID=NormalizeDouble(MarketInfo(SYMBOL1,MODE_BID),Digit);
if(SYMBOL1!="")
{
if(TYPE1==OP_BUY)
{
if(OrderSend(SYMBOL1,OP_BUY,LOT1,ASK,Slippage,0,0,"1й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT1," ",SYMBOL1);
elseAlert(SYMBOL1," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL1,MODE_ASK)," ",LOT1);
}
if(TYPE1==OP_SELL)
{
if(OrderSend(SYMBOL1,OP_SELL,LOT1,BID,Slippage,0,0,"1й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT1," ",SYMBOL1);
elseAlert(SYMBOL1," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL1,MODE_ASK)," ",LOT1);
}
}
if(SYMBOL2!="")
{
Digit=(int)MarketInfo(SYMBOL2,MODE_DIGITS);
Poin=MarketInfo(SYMBOL2,MODE_POINT);
ASK=NormalizeDouble(MarketInfo(SYMBOL2,MODE_ASK),Digit);
BID=NormalizeDouble(MarketInfo(SYMBOL2,MODE_BID),Digit);
if(TYPE2==OP_BUY)
{
if(OrderSend(SYMBOL2,OP_BUY,LOT2,ASK,Slippage,0,0,"2й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT2," ",SYMBOL2);
elseAlert(SYMBOL2," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL2,MODE_ASK)," ",LOT2);
}
if(TYPE2==OP_SELL)
{
if(OrderSend(SYMBOL2,OP_SELL,LOT2,BID,Slippage,0,0,"2й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT2," ",SYMBOL2);
elseAlert(SYMBOL2," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL2,MODE_ASK)," ",LOT2);
}
}
if(SYMBOL3!="")
{
Digit=(int)MarketInfo(SYMBOL3,MODE_DIGITS);
Poin=MarketInfo(SYMBOL3,MODE_POINT);
ASK=NormalizeDouble(MarketInfo(SYMBOL3,MODE_ASK),Digit);
BID=NormalizeDouble(MarketInfo(SYMBOL3,MODE_BID),Digit);
if(TYPE3==OP_BUY)
{
if(OrderSend(SYMBOL3,OP_BUY,LOT3,ASK,Slippage,0,0,"3й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT3," ",SYMBOL3);
elseAlert(SYMBOL3," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL3,MODE_ASK)," ",LOT3);
}
if(TYPE3==OP_SELL)
{
if(OrderSend(SYMBOL3,OP_SELL,LOT3,BID,Slippage,0,0,"3й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT3," ",SYMBOL3);
elseAlert(SYMBOL3," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL3,MODE_ASK)," ",LOT3);
}
}
if(SYMBOL4!="")
{
Digit=(int)MarketInfo(SYMBOL4,MODE_DIGITS);
Poin=MarketInfo(SYMBOL4,MODE_POINT);
ASK=NormalizeDouble(MarketInfo(SYMBOL4,MODE_ASK),Digit);
BID=NormalizeDouble(MarketInfo(SYMBOL4,MODE_BID),Digit);
if(TYPE4==OP_BUY)
{
if(OrderSend(SYMBOL4,OP_BUY,LOT4,ASK,Slippage,0,0,"4й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT4," ",SYMBOL4);
elseAlert(SYMBOL4," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL4,MODE_ASK)," ",LOT4);
}
if(TYPE4==OP_SELL)
{
if(OrderSend(SYMBOL4,OP_SELL,LOT4,BID,Slippage,0,0,"4й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT4," ",SYMBOL4);
elseAlert(SYMBOL4," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL4,MODE_ASK)," ",LOT4);
}
}
return;
}
//=====================================================================void close_orders(int para)
{
bool err;
int p1=0, p2=0; //удаляем только два последних ордераfor(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic)
{
if(p1<=2 && para==1 && (OrderSymbol()==SYMBOL1 || OrderSymbol()==SYMBOL2))
{
if(OrderType()==OP_BUY) err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
p1++;
}
if(p2<=2 && para==2 && (OrderSymbol()==SYMBOL3 || OrderSymbol()==SYMBOL4))
{
if(OrderType()==OP_BUY) err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
p2++;
}
}
}
return;
}
Armen1963: nado chtobi v etom sovetnike stopovie ordera tralilis v rovnie rosstoyaniyax skajem n-niy order n*Фиксированный размер трала chtobi poluchilos setka orderov zaranie spasibo
Подскажите пожалуйста ,,, у меня немного странный вопрос , как правильно написать код чтобы индикатор делал просчет каждую секунду а не каждый тик если можно на примере допустим индикатор каждую секунду складывает 1+1
gonsharov: Подскажите пожалуйста ,,, у меня немного странный вопрос , как правильно написать код чтобы индикатор делал просчет каждую секунду а не каждый тик если можно на примере допустим индикатор каждую секунду складывает 1+1
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Кто может помочь доработать советник, добавив в него, чтобы мог закрывать ордера по профиту? за символическую плату
Я могу
Я могу
Закрытие уже добавил, но не работает...
Нужно чтобы открывались 4 новых ордера после того как из предыдущих 4х ордеров закроются 2 заранее выбранных ордера(SYMBOL1 и SYMBOL2 или SYMBOL3 и SYMBOL4). А 2 этих ордера(SYMBOL1 и SYMBOL2 или SYMBOL3 и SYMBOL4) закрываются при определенной сумме профита(SYMBOL1 + SYMBOL2 или SYMBOL3 + SYMBOL4) соответственно. то есть 4 ордера разделены на 2 пары (SYMBOL1 + SYMBOL2 и SYMBOL3 + SYMBOL4). если какие 2 определенных ордера выходят в профит, то закрываются и открывается новая 4ка ордеров. а которые за следом потом выйдут в профит 2 ордера, они не учитываются для открытия новой 4ки ордеров, а просто закрываются по профиту. и так по новой. начало самого первого открытия 4х ордеров начинается с момента установки советника на график.
Что скажите?Допустим открыты 4 ордера, это: buy EURUSD(-2$); sell GBPUSD(+12$); buy EURGBP(-6$); sell GBPJPY(-2$). Общий профит стоит 10$. Советник должен закрыть: buy EURUSD(-2$) и sell GBPUSD(+12$) (SYMBOL1 + SYMBOL2=общий профит)(SYMBOL3 + SYMBOL4= убыток. их пока не закрывает а ждет когда в профит выйдут).
nado chtobi v etom sovetnike stopovie ordera tralilis v rovnie rosstoyaniyax skajem n-niy order n*Фиксированный размер трала chtobi poluchilos setka orderov zaranie spasibo
Подскажите пожалуйста ,,, у меня немного странный вопрос , как правильно написать код чтобы индикатор делал просчет каждую секунду а не каждый тик если можно на примере допустим индикатор каждую секунду складывает 1+1
не дебагил, писал прямо тут, так что возможно нужно будет немного править.
входной параметр diff - разница между временем в секундахНа наждом тику вызывать функцию checkTime если true - то делать расчеты
всем здрасте.подскажиите как установить робота на мт4 чтоб дил.центр его пропустил к установке.
то есть стоял себе робот а утром бац и больше не устанавливается.в эдиторе есть а на графике где эксперты его нет.
так произошло в ВПС сервере.
на компе устанавливвается.
робот перевертышь личный под заказ.работал исправно.
не дебагил, писал прямо тут, так что возможно нужно будет немного править.
входной параметр diff - разница между временем в секундахНа наждом тику вызывать функцию checkTime если true - то делать расчеты
OnTimer() запускается каждую секунду