Вопросы по программированию в МТ4

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Re: Вопросы по программированию в МТ4

Сообщение Haos » 10 апр 2017, 18:25

Кстати, я и себе, думаю, напишу ф-ию получения даты первого дня текущего месяца.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Вопросы по программированию в МТ4

Сообщение Kalkin » 10 апр 2017, 18:32

serjloskut писал(а):Если только собрать Дату и время по кусочкам? Т.е. сначала вернуть значение года, потом вернуть значение месяца, сложить это все воедино (типа "[значение года]."+"[значение месяца]."+"01"+" 00:00"), и запихать в StringToTime() ?


1. Вычисляем текущий профит по незакрытым позициям (эквити минус баланс, или даже просто воспользовавшись AccountProfit()).
2. В цикле перебираем историю закрытых позиций и складываем профиты позиций, закрытых в этом месяце. Время закрытия позиций определяется функцией OrderCloseTime() для выбраного ордера. Номер месяца для выбраной даты вычисляется функцией TimeMonth(дата). Номер текущего месяца - функция Month(). Итак, при выборе очередного ордера проверяем выполнение условия TimeMonth(OrderCloseTime()) == Month(). Если условие истинно, то позиция закрыта в этом месяце и ее профит суммируем. Также проверяем, что год соответствует текущему, чтобы не выбрать позицию годичной давности TimeYear(OrderCloseTime()) == Year().
3. Вычисляем текущий профит за месяц, сложив полученные значения по первым двум пунктам.
4. Вычисляем баланс на начало месяца: текущие средства минус текущий профит за месяц.
5. Вычисляем процент прибыли: текущий профит за месяц делим на баланс на начало месяца и умножаем на 100.
6. Если полученный процент больше или равен заданному, то закрываем все открытые позиции и запрещаем открытие новых.
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive

Вопросы по программированию в МТ4

Сообщение Kalkin » 10 апр 2017, 18:48

Haos писал(а):Кстати, я и себе, думаю, напишу ф-ию получения даты первого дня текущего месяца.

Я в каком-то советнике писал такое. Сейчас уже не найду, но идея в следующем:
MqlDateTime DT;
TimeToStruct(TimeCurrent(), DT);
Затем в структуре DT обнуляем значения минут, секунд, часов, дня и конвертируем обратно функцией StructToTime().
Хотя, вариантов реализации масса.
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive

Вопросы по программированию в МТ4

Сообщение spartak » 17 май 2017, 06:01

Вернулся к попыткам изучить этот язык, нашел примеры совтеников но вот столкнулся с рядом ошибок при компиляции.В сети искал, но все как то пока для меня мрачно.Может подскажите что делать в таком случае. и что не так делаю я.На скрине возникшие ошибки.
А вот сам код советника,
Код: выделить все
//+------------------------------------------------------------------+
//|                                                     sovetnik.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
extern int Tenkan=9;
extern int Kajun=26;
extern int SenkouB=52;
extern int Magic=111111;
extern double Lot=0.1;
extern int SL=50;
extern int TP=150;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert start function                                             |
//+------------------------------------------------------------------+
int start()
 
  {
  int kolpos=0;
  double TK=iIchimoku(Symbol(),0,Tenkan,Kajun,SenkouB,MODE_TENKANSEN,0);
  double KJ=iIchimoku(Symbol(),0,Tenkan,Kajun,SenkouB,MODE_KIJUNSEN,0);
  double SSA=iIchimoku(Symbol(),0,Tenkan,Kajun,SenkouB,MODE_SENKOUSPANA,0);
  double SSB=iIchimoku(Symbol(),0,Tenkan,Kajun,SenkouB,MODE_SENKOUSPANB,0);
  double CH=iIchimoku(Symbol(),0,Tenkan,Kajun,SenkouB,MODE_CHIKOUSPAN,0);
 
//---
for (int pos=0 ; pos<OrdersTotal();pos++)
{
bool check =
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic)
kolpos++;
}
if (kolpos==0)
{
if (SSA>SSB&&Close[1]>SSA&&Open[1]<SSA&&Volume[0]<3)
bool check =
OrderSend (Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green );
if (SSB>SSA&&Close[1]>SSB&&Open[1]<SSA&&Volume[0]<3)

bool check =
OrderSend (Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green );
if(SSA<SSB&&Close[1]<SSA&&0pen[1]>SSA && Volume[0]<3)

bool check =
OrderSend (Symbol(),OP_SELL,Lot,Bid,10,Bid-SL*Point,Bid+TP*Point,NULL,Magic,0,Red );
if(SSB<SSA&&Close[1]<SSB&&0pen[1]>SSB&&Volume[0]<3)
bool check =
OrderSend (Symbol(),OP_SELL,Lot,Bid,10,Bid-SL*Point,Bid+TP*Point,NULL,Magic,0,Red );
}
//---
   return(0);
  }
//+------------------------------------------------------------------+


Пока не лез менять правила открытия ордера было все норм, а когда начал задавать ему что бы после закрытия тейка не открывался дальше а ждал нового исполнения по сигналу, пошла такая беда.Я пока деревянный в этом, потому что ленивый, и постоянно забиваю на обучение. так что помогите кто чем может :du_ma_et:
Вложения
31.03..png
Последний раз редактировалось Haos 17 май 2017, 06:16, всего редактировалось 1 раз.
Причина: вставка тескта кода в [code]
Аватар пользователя
spartak
 
Сообщений: 4630
Зарегистрирован: 24 апр 2015, 11:24
Средств на руках: 23.30 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 930 раз.
Поблагодарили: 596 раз.

Re: Вопросы по программированию в МТ4

Сообщение Haos » 17 май 2017, 06:11

spartak, для вставки кода есть специальный тег: Code. Пожалуйста, используйте на будущее.
01.png

Вы же удалили свои изменения, тогда в чем проблема? А, понятно, не удалили. Ну так, вместо латинского O Вы ноль поставили! В двух местах. Исправьте и будет без ошибок.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Вопросы по программированию в МТ4

Сообщение spartak » 13 июн 2017, 19:34

Код: выделить все
if (TimeFilter == FALSE || (TimeFilter && (EndHour > StartHour && (Hour() >= StartHour && Hour() <= EndHour))|| (StartHour > EndHour && !(Hour() >= EndHour && Hour() <= StartHour)))) ls_32 = "true";
   if (TimeFilter && (EndHour > StartHour && !(Hour() >= StartHour && Hour() <= EndHour)) || (StartHour > EndHour && (Hour() >= EndHour && Hour() <= StartHour))) ls_40 = "true";
   if (UseTrailingStop) TrailingAlls(gd_136, gd_144, g_price_292);
Не могу разобраться со скобами, пишет ошибку - check operator precedence for possible error; use parentheses to clarify precedence
В сове было 13 предупреждений все подправил, а вот это не могу.Помогите найти ошибку.за ранее спасибо.
Аватар пользователя
spartak
 
Сообщений: 4630
Зарегистрирован: 24 апр 2015, 11:24
Средств на руках: 23.30 Доллар
Награды: 2
Ветеран I (1) Медаль за эрудицию (1)
Группа: Базовая
Благодарил (а): 930 раз.
Поблагодарили: 596 раз.

Вопросы по программированию в МТ4

Сообщение Kalkin » 14 июн 2017, 04:47

Это не ошибка, а предупреждение. Возникает предупреждение в логических конструкциях типа A && B || C. По правилам должно сначала выполняться условие И, а уже потом общее ИЛИ, то есть вот так: (A && B) || C. Если явно указать скобки в такой конструкции, то предупреждение исчезнет. А само предупреждение говорит о том, что возможны разночтения - вдруг хотелось получить конструкцию вида A && (B || C).
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive

Вопросы по программированию в МТ4

Сообщение Alexandeer » 21 июл 2017, 16:27

Долгое время писал контесты на плюсах, используя Visual Studio и оооочень привык к этой среде, а сейчас пишу на MQL4 в стандартном виде и это жутко неудобно. Элементарно бесит то что не могу функции и методы сворачивать, из-за этого очень сложно ориентироваться в коде, производительность ниже и самое главное - нервы. Есть ли какая-нибудь другая среда или есть туториал какой-нибудь как компилятор настроить,а то я в этом не очень шарю,... Еще мне интересно, вот вы эксперты как код пишете? Просто в MQL4 набираете?
Заранее благодарность :-):
Аватар пользователя
Alexandeer
 
Сообщений: 17
Зарегистрирован: 04 ноя 2016, 04:54
Средств на руках: 8.00 Доллар
Группа: Новые пользователи
Благодарил (а): 18 раз.
Поблагодарили: 0 раз.

Re: Вопросы по программированию в МТ4

Сообщение Haos » 21 июл 2017, 20:25

Alexandeer писал(а):Долгое время писал контесты на плюсах, используя Visual Studio и оооочень привык к этой среде, а сейчас пишу на MQL4 в стандартном виде и это жутко неудобно. Элементарно бесит то что не могу функции и методы сворачивать, из-за этого очень сложно ориентироваться в коде, производительность ниже и самое главное - нервы. Есть ли какая-нибудь другая среда или есть туториал какой-нибудь как компилятор настроить,а то я в этом не очень шарю,... Еще мне интересно, вот вы эксперты как код пишете? Просто в MQL4 набираете?
Заранее благодарность :-):

Это не должно бесить уж так, так как банально можно функции отделять строкой и располагать их внизу кода. Поскольку большинство функций одни и те же используются при разработке, то они просто копируются в новый файл советника и т.п. из своего хранилища.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Вопросы по программированию в МТ4

Сообщение Kalkin » 22 июл 2017, 06:34

Для быстрого перехода к нужной функции можно воспользоваться соответствующей пиктограммой:
Поиск функций.jpg

Удобство самого компилятора - дело, в общем-то, привычки. Можно приноровиться, тем более, что он не такой уж и плохой, получше некоторых других. Кстати, один мой знакомый программист на MQL4 рещал прикладные задачи по работе, с форексом никак не связанной :hi_hi_hi:
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения