Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 269

 
Artyom Trishkin:
  1. Есть сигнал, например на открытие позиции Buy.
  2. Находите в истории ордеров самую последнюю закрытую сделку.
  3. Смотрите её тип,
    1. если это Sell, то можно открывать Buy ----> return(ORDER_TYPE_BUY);
    2. если это Buy, то
  4. смотрите с каким профитом закрыта эта позиция Buy.
    1. Если с отрицательным, то можно открывать Buy ----> return(ORDER_TYPE_BUY);
    2. Если с положительным, то открывать новую Buy нельзя ----> return(WRONG_VALUE);
   double ma;
   int    res;
   bool nomber = OrdersHistoryTotal();
   bool tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY)==true)
   {
   tip=OrderType();
   }
   ma=iMA(NULL,0,MovingPeriod,120,MODE_SMA,PRICE_CLOSE,1);
   if(Bid<ma)
   if(tip!=OP_SELL)
   {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,Bid-TP*Point,"",MAGICMA,0,Red);
      return;
     }

Вот я прописал, но все равно не работает. Что не правильно? подскажите пожалуйста.

 

Добрый день ..

Как написать в четверке условие:если первая пятница месяца была бычьей ,а

второй понедельник медвежий то  открываем сделку на продажу .

 
Darirunu: написать условие: если первая пятница месяца была бычьей, а

второй понедельник медвежий то  открываем сделку на продажу.

Вот это интересная задача: на ней можно показать последовательность шагов, по которым надо решать любую задачу
1. Определяем теперешние месяц ММ и год ГГГГ. Берем дату 1.ММ.ГГГГ и определяем для нее день недели
2. Придумываем пару формул (для этого составляем 2 таблицы по 7 строк) и определяем по ним даты интересующих нас дней
3. Если вторая дата в будущем - выход.
4. По датам определяем номера соответствующих баров на дневном графике
5. По номерам баров определяем их принадлежность к бычьим - медвежьим.
6. Делаем заключение о входе в рынок

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
LRA:

Вот это интересная задача: на ней можно показать последовательность шагов, по которым надо решать любую задачу
1. Определяем теперешние месяц ММ и год ГГГГ. Берем дату 1.ММ.ГГГГ и определяем для нее день недели
2. Придумываем пару формул (для этого составляем 2 таблицы по 7 строк) и определяем по ним даты интересующих нас дней
3. Если вторая дата в будущем - выход.
4. По датам определяем номера соответствующих баров на дневном графике
5. По номерам баров определяем их принадлежность к бычьим - медвежьим.
6. Делаем заключение о входе в рынок


По сути ответа в виде кода я так и не увидел ..Алгоритм ясен ..

 
Darirunu:  По сути ответа в виде кода я так и не увидел ..Алгоритм ясен ..

Если алгоритм ясен - пишите программу... Будут трудности - спрашивайте ...

 
LRA:

Если алгоритм ясен - пишите программу... Будут трудности - спрашивайте ...


Вы наверное гений )))Вы думаете если знал бы тут спросил бы ?Просто написать день недели это не проблема ..Дело как определить какая неделя месяца ? В книге по Мт4 об ничего нет .Я вроде вопрос по теме задавал"

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам 

 
Lowech:
   bool nomber = OrdersHistoryTotal();
   bool tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY)==true)
   {
   tip=OrderType();
   }

Вот я прописал, но все равно не работает. Что не правильно? подскажите пожалуйста.

Рассмотрим эту часть. В первой строке в переменную nomber заносится количество ордеров в истории. Ставим курсор на OrdersHistoryTotal() и нажимаем F1. Видим:

int  OrdersHistoryTotal();


Функция возвращает целое число. А bool имеет только два значения. Ну как в bool уместить значение типа int ?

Во второй строке та же ошибка и еще одна. Ставим курсор на OrderType() и нажимаем F1. Видим:Ордер должен быть предварительно выбран с помощью функции OrderSelect().

В третьей строке вообще УЖОС. 1) if(OrderSelect(  - если ордер будет выбран - то что-то выполняется. А если тут произойдет ошибка? у Вас программа продолжается. 2) должен быть выбран ордер с номером nomber. Но есть ли ордер с таким номером?  Какой минимальный и максимальный номера ордеров, если всего их nomber? 3) вместо if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY)==true) почти любой написал бы просто if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY)) ну и еще одна мелочь.

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

 
Darirunu:  Дело как определить какая неделя месяца? В книге по Мт4 об ничего нет

А зачем нужно знать какая неделя месяца? В моем алгоритме это отсутствует. (пробел ставьте только после знаков препинания)

 
LRA:

А зачем нужно знать какая неделя месяца? В моем алгоритме это отсутствует. (пробел ставьте только после знаков препинания)


Извините вы наверное не обратили  на вопрос внимание ..

Как написать в четверке условие:если первая пятница месяца была бычьей ,а

второй понедельник медвежий то  открываем сделку на продажу .

DayOfWeek()==1 понедельник это ясно ,а какой это понедельник месяца?Ну в вашем это не нужно это ясно ..Я же не о вашем спрашиваю))

 
Darirunu:

По сути ответа в виде кода я так и не увидел ..Алгоритм ясен ..

Достаточно знать каким днём недели было первое число месяца. Остальное вычисляется.
Причина обращения: