[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 571

 
xant:

Просьба подсказать. 

 У меня в советнике расчет выхода идет от накопленной прибыли. Например, если в какой-то момент времени эквити=балансу, то советник закроет все сделки, когда текущий эквити превысит этот самый первоначальный. Закрывает все сделки, сколько бы их не было.

Это просто в тестере, ведь там одна валютная пара.  

Реально же торговля идет по нескольким валютам, и учитывать каждую нужно отдельно. Например: Если по какой-то валютной паре нет открытых сделок, то переменная==0. И нужно точно также отслеживать закрытые сделки по этой паре, и ждать пока накопленный профит превысит убыток от открытых ордеров этой пары на заданную величину.  

 Я не могу найти в учебнике, с помощью какой функции можно организовать разделение учета накопленного профита по разным валютам. Подскажите кто знает. Спасибо.  


Надо  организовывать свой учет. Функции  AccountEquity()и AccountBalance() считают только общий.и для одной валютной пары надо считать не баланс и эквити а суммарный профит по всем ордерам данной пары.

А вообще, обычно, в сове это защита баланса, котрая заакрывает все сделки и отключает советник при слишком большой просадке.
 

 

///Надо организовывать свой учет. Функции AccountEquity()и AccountBalance() считают только общий.

Ну так о чем и речь - каким образом организовать?

Писать в файл не хотелось бы, поскольку советник запускатся с разных терминалов. Нужно чтобы он считал только ту валютную пару, на которой стоит. Как считать профит/убыток закрытых ордеров после инициации цикла?

Цикл начинается при первом входе, уже начинается отклонение от нуля в профит или убыток. При каждом закрытии ордера этой пары нужно складывать в буфер результат закрытия ордера. Как только   значение  буфера +  профит по открытым  станет больше заданной величины - идет команда на закрытие всех сделок.

Алгоритм мне примерно понятен. Мне непонятно, как учитывать. Я ж новичок) 

 
xant:

///Надо организовывать свой учет. Функции AccountEquity()и AccountBalance() считают только общий.

Ну так о чем и речь - каким образом организовать?

Писать в файл не хотелось бы, поскольку советник запускатся с разных терминалов. Нужно чтобы он считал только ту валютную пару, на которой стоит. Как считать профит/убыток закрытых ордеров после инициации цикла?

Цикл начинается при первом входе, уже начинается отклонение от нуля в профит или убыток. При каждом закрытии ордера этой пары нужно складывать в буфер результат закрытия ордера. Как только   значение  буфера +  профит по открытым  станет больше заданной величины - идет команда на закрытие всех сделок.

Алгоритм мне примерно понятен. Мне непонятно, как учитывать. Я ж новичок) 


Функция 
OrderProfit()
И зачем в файл? просто переменная.  
 

rigonich , 

если уж быть точным то  (OrderProfit()+OrderCommission()+OrderSwap()

Так как брать инфу с закрытых ордеров?

Я выбираю ордера с помощью OrderSelect(), из закрытых MODE_HISTORY, но как выбирать нужные?

Если я смогу из истории взять те, что закрылись после моего условия, тогда я конечно возьму и суммирую все что нужно. Но я не понимаю как это сделать, к сожалению.  

 
7Konstantin7:

Подскажите в чем ошибка, я новичок в mql

вписал TimeBar_t =  Minute() ; не могу понять то ли скобки куда надо или ;

int Minute( )
Возвращает текущую минуту (0,1,2,..59) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).
Замечание: при тестировании последнее известное время сервера моделируется.
Так что ваше условие будет выполняться только в момент старта. 
 
xant:

rigonich , 

если уж быть точным то  (OrderProfit()+OrderCommission()+OrderSwap()

Так как брать инфу с закрытых ордеров?

Я выбираю ордера с помощью OrderSelect(), из закрытых MODE_HISTORY, но как выбирать нужные?

Если я смогу из истории взять те, что закрылись после моего условия, тогда я конечно возьму и суммирую все что нужно. Но я не понимаю как это сделать, к сожалению.  


А какие вам нужно? Например запоминаете дату открытия первого ордера по инструменту вашим советником и выбираете все, открытые после нее,  сбрасываете значение переменной после закрытия по условию и запоминаете новое (текущее) значение.
 
xant:

Просьба подсказать. 

 У меня в советнике расчет выхода идет от накопленной прибыли. Например, если в какой-то момент времени эквити=балансу, то советник закроет все сделки, когда текущий эквити превысит этот самый первоначальный. Закрывает все сделки, сколько бы их не было.

Это просто в тестере, ведь там одна валютная пара.  

Реально же торговля идет по нескольким валютам, и учитывать каждую нужно отдельно. Например: Если по какой-то валютной паре нет открытых сделок, то переменная==0. И нужно точно также отслеживать закрытые сделки по этой паре, и ждать пока накопленный профит превысит убыток от открытых ордеров этой пары на заданную величину.  

 Я не могу найти в учебнике, с помощью какой функции можно организовать разделение учета накопленного профита по разным валютам. Подскажите кто знает. Спасибо.  


https://www.mql5.com/ru/forum/131859/page3#434223   вот, и еще https://www.mql5.com/ru/forum/131859/page3#434222
 
Помогите написать условие на открытие позиций.

Не могу написать дополнительное условие для открытие зделок по задуманному принцепу.

Нужно что бы после закрытии любой позиции по TP или SL он открыл её заного с противоположной позицией.

Пример: если закрылась позиция Sell скажем по SL он заного открыл позицию Sell вместе с ней и Buy

Вот 2 условия из советника:

условие на покупку

if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
if(NumberOfPositions(Symbol(),OP_BUY,Magic)<MaxOrders)OPENORDER ("Buy");
}

условие на продажу

if (SELL)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
if(NumberOfPositions(Symbol(),OP_SELL,Magic)<MaxOrders)OPENORDER ("Sell");
}

Кто в этом резбирается помогите написать дополнительное усло
Файлы:
sellbuy_4.mq4  3 kb
 
rigonich  ваше условие не подходит(( он открывает ордера бесконечно  пока депо хватает
 
rigonich:

Чтобы смещать влево -- F12, вправо -- не знаю.

rigonich Спасибо, подсказал отлично! Как раз что надо!
Причина обращения: