Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#6326
10 минут назад, Lexa000 сказал:

Вот такой Советник

iSmart.mq4 21 \u043a\u0411 · 0 загрузок

очевидно же в блоке Drawdown

 

if(Close[1]>Open[1])
      if(iPointOrderStepLoss>0 && b>0 && (BuyPriceMin-Ask)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_BUY,NormalizeDouble(iStartLots,2),NormalizeDouble(Ask,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

   if(Close[1]<Open[1])
      if(iPointOrderStepLoss>0 && s>0 && (Bid-SelPriceMax)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_SELL,NormalizeDouble(SelLot,2),NormalizeDouble(Bid,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

 

надо вот так

 

if(Close[1]>Open[1])
      if(iPointOrderStepLoss>0 && b>0 && (BuyPriceMin-Ask)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_BUY,NormalizeDouble(BuyLot,2),NormalizeDouble(Ask,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

   if(Close[1]<Open[1])
      if(iPointOrderStepLoss>0 && s>0 && (Bid-SelPriceMax)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_SELL,NormalizeDouble(SelLot,2),NormalizeDouble(Bid,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

 

скорее всего:))

Изменено 27 мая, 2021 пользователем dermitay

#6327
6 часов назад, dermitay сказал:

очевидно же в блоке Drawdown

 


if(Close[1]>Open[1])
      if(iPointOrderStepLoss>0 && b>0 && (BuyPriceMin-Ask)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_BUY,NormalizeDouble(iStartLots,2),NormalizeDouble(Ask,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

   if(Close[1]<Open[1])
      if(iPointOrderStepLoss>0 && s>0 && (Bid-SelPriceMax)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_SELL,NormalizeDouble(SelLot,2),NormalizeDouble(Bid,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

 

надо вот так

 


if(Close[1]>Open[1])
      if(iPointOrderStepLoss>0 && b>0 && (BuyPriceMin-Ask)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_BUY,NormalizeDouble(BuyLot,2),NormalizeDouble(Ask,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

   if(Close[1]<Open[1])
      if(iPointOrderStepLoss>0 && s>0 && (Bid-SelPriceMax)>iPointOrderStepLoss*Point())
         if(OrderSend(Symbol(),OP_SELL,NormalizeDouble(SelLot,2),NormalizeDouble(Bid,Digits()),iSlippage,0,0,"iSmart",iMagicNumber,0,clrGreen)<0)
            Print("OrderSend error #",GetLastError());

 

скорее всего:))

Да, перепутал. Если использовать AccountBalance к этому советнику, то можно сделать так как я спрашивал?

#6328

Я про создание правила, против сетки ордеров 0.10 открытие стартового лота составляло лот 0.02, против сетки 0.20 в продажу составляло стартовый лот 0.03. Вот так

#6329

Или остановку убыточной сетки, открывая сделки в одном направлении потихоньку закрывая убыток 

#6330
18 минут назад, Lexa000 сказал:

Или остановку убыточной сетки, открывая сделки в одном направлении потихоньку закрывая убыток 

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

#6331
7 минут назад, usver73 сказал:

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

Да, я знаю, это долгий процесс, хотелось бы найти золотую середину

#6332
14 минут назад, Lexa000 сказал:

Да, я знаю, это долгий процесс, хотелось бы найти золотую середину

нет золотой середины.
Либо сетка без локирования, либо один ордер в рынке

#6333
15 минут назад, usver73 сказал:

нет золотой середины.
Либо сетка без локирования, либо один ордер в рынке

Сетка без локирование может оказаться убыточной, поэтому и задал такой вопрос

#6334
10 минут назад, Lexa000 сказал:

Сетка без локирование может оказаться убыточной, поэтому и задал такой вопрос

Точнее, она может привести к сливу.
Можно сетку стопить при определенном уровне убытка. И в этот момент открывать встречный ордер. Тогда это будет осмысленно.
Но это вопрос ММ и в этой ветке оффтоп..

#6335

https://www.mql5.com/ru/articles/5596

  Нашёл статью. Мне нужно понять как создать такую стратегию в советнике при достижении массива сетки в сумме 0.15 открывать противоположную с 0.02, либо при достижении массива сетки в сумме 0.15 останавливать частично закрывая прибыльным лотом. Что-то подобное  

#6336

Прохожу обучение, есть вопрос: Как запретить открытие ордеров в торговом советнике mql4 определённых валютных пар? Пары буду указывать в F7 через точку с запятой. 

#6337

Второй вопрос: как в советнике реализовать привязку лотности к вручную указанному значению в F7? Не к балансу счёта, а именно к цифре, желательно через F7.

#6338

Отчаянно всех приветствую! Господа!... и дамы разумеется. В девятом уроке базового курса упоминается некий урок, в котором разбирались массивы. Я прям очень внимательно смотрел все предыдущие восемь, но про массивы там ни слова. Может найдется добрая душа и подскажет где можно найти урок по массивам автора курса. В продвинутых уроках есть видео другого автора, но хотелось бы посмотреть именно Сергея. Спасибо всем не равнодушным к проблеме страждущего знаний, тройных профитов и +100500 к карме!

#6339
2 часа назад, Александр I сказал:

Спасибо всем не равнодушным к проблеме страждущего знаний, тройных профитов и +100500 к карме!

https://mql.su/mql4/dimensions/

http://mql.su/wp-content/uploads/2017/09/Studmed.ru_kovalev-mql4.pdf страница 230

Буду ждать карму.

Изменено 2 июня, 2021 пользователем Rever27

#6340

Всем доброго времени.

Вопрос такой, мне нужно изначально в параметрах советника прописать флаги для торговли, допустим уже идет продажа но она возможно заканчивается и советнику необходимо сразу поставить флаг на покупку, т.к. в продажу уже не успели. Для этого я прописываю в шапке параметры:

 

input bool          trade_flag_buy   = true;
input bool          trade_flag_sell  = false;

 

Теперь когда закончилась продажа, советник зашел в покупку, после закрыл ордер покупки и вот здесь мне нужно чтоб флаги переключились, т.е. нельзя писать так:

 

 trade_flag_buy   = false;
 trade_flag_sell  = true;

 

Для этого я так понимаю нужно завести еще пару булевых переменных и приравнять их к тем переменным в шапке: 

 

bool flag_buy = trade_flag_buy;
bool flag_sell = trade_flag_sell;

 

И собственно сам вопрос, в каком месте советника это написать, чтобы код работал уже со свежими значениями переменных flag_buy и flag_sell ?

#6341

@diodio Приветствую! Я не пойму зачем столько переменных, если можно обойтись всего одной.

input bool trade_flag = true;

Если есть торговля на продажу или покупку это всего два режима. Эти два режима может вместить всего одна переменная.

  1. покупка

trade_flag = true

  • равнозначно и бессмысленно

trade_flag_buy = true;
trade_flag_sell = false;

  • следовательно равнозначно и бессмысленно

flag_buy = trade_flag_buy;
flag_sell = trade_flag_sell;

 

  1. продажа

trade_flag=false;

  • равнозначно и бессмысленно

trade_flag_buy = false;
trade_flag_sell = true;

  • следовательно равнозначно и бессмысленно

flag_buy = trade_flag_buy;
flag_sell = trade_flag_sell;

#6342
8 минут назад, MikR0ReR сказал:

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

input bool trade_flag = true;

Если есть торговля на продажу или покупку это всего два режима. Эти два режима может вместить всего одна переменная.

Хорошо, спорить не буду, так как ее переключить потом после того как я первый раз введу ее в шапке?

#6343
1 минуту назад, diodio сказал:

Хорошо, спорить не буду, так как ее переключить потом после того как я первый раз введу ее в шапке?

не въезжаю зачем руками делать такие пляски. если условие переключения "режимов" бай и селл можно описательны и формализованы, то можно это все закодить.

#6344
Только что, dermitay сказал:

не въезжаю зачем руками делать такие пляски. если условие переключения "режимов" бай и селл можно описательны и формализованы, то можно это все закодить.

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

#6345

@diodio в том месте где ты считаешь что пора там и меняешь значение переменной.

#6346
Только что, MikR0ReR сказал:

в том месте где ты считаешь что пора там и меняешь значение переменной.

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

#6347

К примеру код:

 

input bool          trade_flag   = true;

........................................................

void OnTick()

{

if(trade_flag   == true)

{

открываем покупку

trade_flag = false;

}

else if(trade_flag   == false)

{

открываем продажу

trade_flag = true;

}

}

Вот в таком виде не переключается и вызывает ошибку.

Как переключить?

#6348

@diodio input поменяй на extern. 

#6349

Доброго времени суток, Господа!

Подскажите, каким образом и вообще возможно ли узнать, что ордер закрыл человек, а не советник?

#6350

Добрый день!

Кто-нибудь, подскажите пожалуйста, как можно узнать точное время (в формате ч:м:сек) пересечения цены и индикатора, например скользящей средней?

Спасибо!

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025