Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 512

 
woin2110:

if ((hi-low)<=max_koridor_v_punktah)
{
int buy = OrderSend(Symbol(), OP_BUYSTOP, LotBuy, OpenBuy, 0, StopLossBuy, 0);//открытие ордера на покупку.

if (buy>0)
{
Alert ("Установлен ордер BuyStop ",buy);
}
int sell= OrderSend(Symbol(), OP_SELLSTOP, LotSell, OpenSell, 0, StopLossSell, 0);//открытие ордера на продажу.
if (sell>0)
{
Alert ("Установлен ордер SellStop ",sell);
}
if (DayOfWeek()==5 && Hour()==22) //удаляем отложенные и открытые ордера в пятницу, в 23:00 по серверному времени
{
if (OrderSelect(sell,SELECT_BY_TICKET)==true)
{
OrderClose(sell,OrderLots(),Bid,3,Green);//(тикет,лот,цена закрытия,проскальзывание в пунктах,цвет стрелки закрытия на графике)зыкрытие рыночного ордера на продажу.
OrderDelete(sell);//закрытие лимиток на продажу.
}
if (OrderSelect(buy,SELECT_BY_TICKET)==true)
{
OrderClose(buy,OrderLots(),Ask,3,Red);//(тикет,лот,цена закрытия,проскальзывание в пунктах,цвет стрелки закрытия на графике)зыкрытие рыночного ордера на покупку.
OrderDelete(buy);//закрытие лимиток на покупку.
return(0);
}
}
}

Кто подскажет почему не закрывает ордера и не удаляет лимитки?


Закрывать buy ордер нужно по цене Bid, sell по Ask.
 
isn-88:

Закрывать buy ордер нужно по цене Bid, sell по Ask.
спасибо
 
AlexeyVik:
Простое условие в функции init
Металлы, акции и сырьё не в счёт.

Спс. Не подскажите самый простой вариант. Необходимо понять, есть ли открытые позиции по данной паре или нет. Есть ли ордера на продажи, а есть ли на покупку. То есть необходимо получить

0-если нет открытых ордеров

1-есть ордера на продажу но нет на покупку.

2-есть ордера на покупку но нет на продажу

3-есть то и другое...

 
woin2110:

https://docs.mql4.com/ru/series

if(DayOfWeek()==1,2..... && Hour()==1,2....)
{
double hi=iHigh(NULL,0,iBarShift(NULL,0,iTime(NULL,PERIOD_D1,0)));//определяем хай
double low=iLow(NULL,0,iBarShift(NULL,0,iTime(NULL,PERIOD_D1,0)));//определяем лов.

/////////////////////////////////////////////////////////////////////////////////////////////////

double op=iOpen(NULL,0,iBarShift(NULL,0,iTime(NULL,PERIOD_D1,0)));//определяем открытие.


Благодарю!
 
Zolotai:

Спс. Не подскажите самый простой вариант. Необходимо понять, есть ли открытые позиции по данной паре или нет. Есть ли ордера на продажи, а есть ли на покупку. То есть необходимо получить

0-если нет открытых ордеров

1-есть ордера на продажу но нет на покупку.

2-есть ордера на покупку но нет на продажу

3-есть то и другое...

Например так:

int i_buy=0;

int i_sell=0;

//--- получим количество открытых и отложенных ордеров

int total=OrdersTotal();

for(int i=0;i<total;i++)

{

//--- выберем i-й ордер из списка торговли

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

{

//--- если ордер открыт по текущему финансовому инструменту

if(OrderSymbol()==Symbol())

{

switch(OrderType())

{

//--- Бай ордер

case OP_BUY:

i_buy++;

break;

//--- Селл ордер

case OP_SELL:

i_sell++;

break;

case OP_BUYSTOP:

case OP_BUYLIMIT:

case OP_SELLSTOP:

case OP_SELLLIMIT:

//--- пробойники, лимитники

break;

}

}

}

}


if(i_buy==0 && i_sell==0)

{

//--- нет открытых ордеров

}

if(i_buy>0 && i_sell==0)

{

//--- открыты баи

}

if(i_buy==0 && i_sell>0)

{

//--- открыты селы

}

if(i_buy>0 && i_sell>0)

{

//--- открыты и баи и селы

}

 
isn-88:

Например так:



Спасибо большое. Я так понимаю, аск- текущая цена. Открываю ордер тогда когда нет открытых ордеров. Цикл перебирает от первого до последнего открытого ордера? Как мне передать в переменную лот последнего открытого ордера и цену его?
 
Zolotai:

Спасибо большое. Я так понимаю, аск- текущая цена. Открываю ордер тогда когда нет открытых ордеров. Цикл перебирает от первого до последнего открытого ордера? Как мне передать в переменную лот последнего открытого ордера и цену его?

https://docs.mql4.com/ru/trading/orderselect https://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

double z; //обьявляем переменную "z"
double y; //обьявляем переменную "y"


if(OrderSelect(10,SELECT_BY_POS)==true) //если выбранный ордер (по тикету) присутствует

{

OrderLots()=z //присвоить лот данного ордера переменной "z"

OrderOpenPrice()=y //присвоить цену открытия переменной "y"

}

попробуй так

 
woin2110:

https://docs.mql4.com/ru/trading/orderselect https://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

double z; //обьявляем переменную "z"
double y; //обьявляем переменную "y"


if(OrderSelect(10,SELECT_BY_POS)==true) //если выбранный ордер (по тикету) присутствует

{

OrderLots()=z //присвоить лот данного ордера переменной "z"

OrderOpenPrice()=y //присвоить цену открытия переменной "y"

}

попробуй так

y = OrderOpenPrice();


Спс, разобрался.Вот только не пойму. if((i_buy==0 && i_sell==0) || y > Step). Должен открыть еще один ордер если растояние от последнего открытого больше 5 пунктов. Но не работает, вопрос.

for(int i=0;i<total;i++) Перебирается от первого открытого до последнего? То есть я в итоге должен получить цену последнего открытого ордера.

 
Zolotai:

y = OrderOpenPrice();


Спс, разобрался.Вот только не пойму. if((i_buy==0 && i_sell==0) || y > Step). Должен открыть еще один ордер если растояние от последнего открытого больше 5 пунктов. Но не работает, вопрос.

for(int i=0;i<total;i++) Перебирается от первого открытого до последнего? То есть я в итоге должен получить цену последнего открытого ордера.


вот ето я не знаю, не сталкивался
 

Здравствуйте. В теме https://forum.mql4.com/ru/51490/page2 видел пост где есть скрипт который открывает окно настроек советника:

этот вызывает окно настроек советника :

//+------------------------------------------------------------------+
//|                                                      EaSetup.mq4 |
//+------------------------------------------------------------------+
//|                                                      EaStart.mq4 |
//|                                 Copyright © 2010, XrustSolution. |
//|                                           mail: xrustx@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, XrustSolution."
#property link      "mail: xrustx@gmail.com"
#import "user32.dll"
   int   RegisterWindowMessageA(string lpstring);
   int   PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
#import
#define WM_COMMAND      0x0111
//+------------------------------------------------------------------+
void start(){Sleep(200);PostMessageA(WindowHandle(Symbol(),Period()), WM_COMMAND, 33048, 0);return;}
//+------------------------------------------------------------------+ 

Скажите можно ли сделать так чтобы скрипт с интервалом в 1 секунду открывал окно настроек советника и сразу же его подтверждал (нажимал кнопку ок) и так постоянно?

Причина обращения: