Покупка/продажа советников и индикаторов - страница 4

 
cifox:
Здравствуйте мастера ......, Не могли бы вы помочь мне сделать советника для открытой покупки или открытой продажи на время...

Я переместил ваше сообщение сюда.

Прочитайте эту тему с первого сообщения и вы найдете несколько советников.

 

Открывайте только одну покупку и одну продажу в день!

Привет, ребята,

У меня небольшая проблема с моим советником. Он основан на движении цены и в течение одного дня он открывает более одной позиции. Я хочу ограничить это, но не понимаю, как это сделать.

Я хочу сделать примерно следующее:

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

Я не знаю, как это написать и какая позиция правильная. Можете ли вы мне помочь?

Спасибо большое!!!

С уважением,

Мауро

EDIT:

В другой теме я нашел этот код, но я не знаю, куда и как его прикрепить:

if(OrderSelect(1, SELECT_BY_POS)==true)

{

if(TimeToStr(OrderOpenTime(),TIME_DATE ) != TimeToStr(CurTime(),TIME_DATE ))

{

//open new order

}

}
 

В этой теме нет ничего о том, что я ищу... эта тема о покупке и продаже одновременно.... Но я говорю о том, что если я уже открыл ордер на покупку, мой советник в течение дня не открывает новый ордер на покупку. То же самое, если он уже открыл ордер на продажу.

Но если он открыл ордер на покупку, то в течение дня он может открыть только ордер на продажу... следуя правилам, написанным выше.

Пример:

Время: сегодня.

Советник открывает ордер на покупку.

Позиция достигает TakeProfit или StopLoss, поэтому она закрывается.

Теперь советник видит другой сигнал на покупку, но, видя, что в предыдущий раз он уже открыл ордер на покупку, он не открывает этот ордер.

Теперь советник видит сигнал SELL, и, видя, что он еще не открыл ордер SELL, он открывает позицию SELL.

Позиция достигает TakeProfit или StopLoss, поэтому она закрывается.

Теперь советник видит другой сигнал на продажу, но, видя, что он уже открыл ордер на продажу в предыдущий раз, он не открывает этот ордер.

Вот что я ищу....

 

В этом случае вам нужны эти 2 нити:

https://www.mql5.com/en/forum/176322

https://www.mql5.com/en/forum/173026

 

Хорошо, спасибо за ваш ответ NewDigital. Теперь я думаю, что мой код таков:

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

ticket=OrderSend(....

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

[/CODE]

So, can you check if I have added this code in the right way on my code?Here it is

[CODE]if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "MaxPower Buy Order", MagicNumber, 0, DodgerBlue);

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

Код выше предназначен только для позиции на покупку, поэтому таким образом он должен открывать только позицию на покупку. Если я сделаю то же самое для кода SELL, он должен открыть только позицию на продажу, верно?

Спасибо за помощь.

Мауро

 

МММ... Метаредактор говорит, что произошла ошибка...

'\end_of_program' - unbalanced left parenthesis (259, 1)
 

Это значит, что этот

{[/CODE]

and

[CODE]}

не сбалансирован.

Проверьте в коде.

Извините, я не кодер, поэтому не могу ничем помочь.

 

Привет newdigital...да, я знаю для pharentesis.... но я проверил весь код и pharentesis сбалансированы....

ммм.... Я не понимаю, где проблема.... Однако, я буду продолжать проверять...я надеюсь найти решение!

Спасибо за все...

Мауро

 

Например, вот это:

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());
 

Отладка MT4 - это та еще морока, но если вы будете терпеливы, то сможете разобраться в проблеме.

Первое, что я бы сказал, это то, что там, где MT4 говорит вам, что проблема есть... ее нет! Следующее, что я бы сделал, это начал вырезать огромные куски кода в сложном операторе IF, который, скорее всего, вызывает проблемы.

Например, если у меня есть...

if(){

//second if

if(){

//third if

if(){

}

}

}

Я бы вырезал if'ы 2 и 3 и оставил только if 1. Попробуйте скомпилировать его. Если он скомпилируется, вы сузили круг поиска. Затем вставьте обратно 2 и 3, затем вырежьте 3. Проверьте снова. Продолжайте делать это в течение нескольких минут, и в конце концов вы найдете проблему.

Удачи.

LUx

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