Ваши вопросы по языку MQL4

greatiger

Активный участник

а как именно описать переменную? double? каким типом вводные переменные описываются если не секрет) а то в синтаксисе этого языка ноль из нулей)

ПС..после пивного застолья( если что не так написал прошу понять(
 
Последнее редактирование:

eevviill

Заблокирован
а как именно описать переменную? double? каким типом вводные переменные описываются если не секрет) а то в синтаксисе этого языка ноль из нулей)

ПС..после пивного застолья( если что не так написал прошу понять(
PHP:
extern double Max_lot = 122.6;
http://forexsystemsru.com/yazyk-programmirovaniya-mql4/67073-mql4-uroki-ot-eevviill.html#post410681
 

aufx

Интересующийся
Коллеги! Подскажите плисс..
Вот пример из учебника

while(!IsStopped()) // До тех пор, пока пользователь..
{ // ..не прекратит исполнение программы RefreshRates(); // Обновление данных
//......................Здесь указывается основной код ограммы
Sleep(5); // Небольшая пауза
}

При выполнении этой проги терминал тупо виснет и не хочет больше ни с кем общаться. Только Ctrl+Alt+Del заставляет (после удаления этой функции и компиляции проги) оживить его.
Ни кто не подскажет как "общаться" с этой прогой?
 

eevviill

Заблокирован
Коллеги! Подскажите плисс..
Вот пример из учебника

while(!IsStopped()) // До тех пор, пока пользователь..
{ // ..не прекратит исполнение программы RefreshRates(); // Обновление данных
//......................Здесь указывается основной код ограммы
Sleep(5); // Небольшая пауза
}

При выполнении этой проги терминал тупо виснет и не хочет больше ни с кем общаться. Только Ctrl+Alt+Del заставляет (после удаления этой функции и компиляции проги) оживить его.
Ни кто не подскажет как "общаться" с этой прогой?
Думаю потому что перегружается процесор. Ведь то что в коде выполняется даже не на каждом тике, а постоянно.
 

eevviill

Заблокирован
Такое может быть??

У меня проблема.

Объявил буфер
PHP:
double Mins[];

Пишу.
PHP:
Mins[1]=EMPTY_VALUE;
Alert(Mins[1]);

Выдаёт 0. Почему так?
 

expforex

Программиров
Вы не задали размерность массива
в Вашем случае:
double Mins[2];
Mins[1]=EMPTY_VALUE;
Alert(Mins[1]);
 

expforex

Программиров
В индикаторе размер массива генерируется автоматически
я бы даже сказал там не массивы а буферы.
 
Последнее редактирование:

hoz

Активный участник
У меня следующая ситуация. Совок ставит в определённое время, а точнее, по закрытия свечи на D1 отложенный ордер - лимитник по канкретной цене. Если лимитник не сработал к закрытию следующей свечи на, то его нужно просто удалить.

Если вариантов несколько как я понимаю:

1. Можно дать параметру expiration функции OrderSend() значение, т.е. просчитать его и задать ровно 24 часа в секундах, итого получиться (60 * 60) *24 часа = 86400 секунд.
Т.е. ордер будет иметь такой вид(если байлимит):

PHP:
OrderSend(string symbol, OP_BUYLIMIT, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime 86400, color arrow_color=CLR_NONE)


2. Другой вариант, будет таким, что можно создать условие типа:

PHP:
if( (time[0] == ВРЕМЯ, ГДЕ ОРДЕР НУЖНО ЗАКРЫТЬ ) && ( Ordertype >= 1 ))
  {
     Orderclose();
  }


Т.е. если время, в которое истекает срок его закрытия пришло и тип ордера - отложенник.. ЗАКРЫВАЕМ ЕГО.

Прошу подсказать как более грамотно реализовать данный момент.
А может есть ещё какие варианты?
 
Последнее редактирование модератором:

Hurghadahome

Почетный гражданин
ПАРНИ ПОМОГИТЕ .
НУЖЕН БОТ КОТОРЫЙ БУДЕТ ЗАКРЫВАТЬ ВСЕ ОТКРЫТЫЕ СДЕЛКИ ЕСЛИ ОНИ НЕ ПОДПАДАЮТ ПОД УСЛОВИЕ: РАБОТА РАЗРЕШЕНА ТОЛЬКО ПЕРВЫЕ ПОЛ ЧАСА ПОСЛЕ ЗАКРЫТИЯ ЧЕТЫРЕХ ЧАСОВОЙ СВЕЧИ(ЗАПРЕТ ДЛЯ ВСЕХ ОРДЕРОВ В ТОМ ЧИСЛЕ И ОТЛОЖЕННЫХ).
И ВСЕ
С УВАЖЕНИЕМ ИЛЬЯ.
 
Последнее редактирование:

eevviill

Заблокирован
У меня следующая ситуация. Совок ставит в определённое время, а точнее, по закрытия свечи на D1 отложенный ордер - лимитник по канкретной цене. Если лимитник не сработал к закрытию следующей свечи на, то его нужно просто удалить.

Если вариантов несколько как я понимаю:

1. Можно дать параметру expiration функции OrderSend() значение, т.е. просчитать его и задать ровно 24 часа в секундах, итого получиться (60 * 60) *24 часа = 86400 секунд.
Т.е. ордер будет иметь такой вид(если байлимит):

PHP:
OrderSend(string symbol, OP_BUYLIMIT, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime 86400, color arrow_color=CLR_NONE)


2. Другой вариант, будет таким, что можно создать условие типа:

PHP:
if( (time[0] == ВРЕМЯ, ГДЕ ОРДЕР НУЖНО ЗАКРЫТЬ ) && ( Ordertype >= 1 ))
  {
     Orderclose();
  }


Т.е. если время, в которое истекает срок его закрытия пришло и тип ордера - отложенник.. ЗАКРЫВАЕМ ЕГО.

Прошу подсказать как более грамотно реализовать данный момент.
А может есть ещё какие варианты?

PHP:
static int prevtime = 0;
это в глобальные переменные(с самого начала програмы)

PHP:
prevtime = iTime(Symbol(),0,0);
это в int init()

PHP:
if (iTime(Symbol(), 0, 0) == prevtime) {Sleep(50);return(0);}
   prevtime = iTime(Symbol(),0,0);
это в int start()


Думаю так будет лучше(если я правильно понял). Сразу после открытия новой свечи будет проверка.
 

hoz

Активный участник
ПАРНИ ПОМОГИТЕ .
НУЖЕН БОТ КОТОРЫЙ БУДЕТ ЗАКРЫВАТЬ ВСЕ ОТКРЫТЫЕ СДЕЛКИ ЕСЛИ ОНИ НЕ ПОДПАДАЮТ ПОД УСЛОВИЕ: РАБОТА РАЗРЕШЕНА ТОЛЬКО ПЕРВЫЕ ПОЛ ЧАСА ПОСЛЕ ЗАКРЫТИЯ ЧЕТЫРЕХ ЧАСОВОЙ СВЕЧИ(ЗАПРЕТ ДЛЯ ВСЕХ ОРДЕРОВ В ТОМ ЧИСЛЕ И ОТЛОЖЕННЫХ).
И ВСЕ
С УВАЖЕНИЕМ ИЛЬЯ.


Это тебе нужен не бот, а сову дописать. Ты хочешь, что бы закрывались только сделки, которые не подпадают под условие только? Т.е. они открылись по условию, а к закрытию свечи H4 условия уже не те, верно?
А ордера, которые не противоречат условиям должны остаться открыты?
 

hoz

Активный участник
eevviill, то что ты написал, это, можно так выразиться, ф-ция определения нового бара.. Мне же нужно, не какое-то время текущее, полученное через:

PHP:
iTime(Symbol(),0,0)


В данном случае, нужно чтоб проверка происходила каждые сутки, т.е. каждые 24 часа

Ещё я думаю, в какую ф-цию эту проверку включить. Может быть оптимальным вариантом будет внедрить её в пользовательскую ф-цию Close()
Например,

PHP:
CloseOrders(ВРЕМЯ ЗАКРЫТИЯ)
 if time[0] == ВРЕМЯ ЗАКРЫТИЯ,
   {
      orderсlose();
   }


Надеюсь, я понятно объяснил ситуацию. Написать абы написать я смогу и сам, но хочу услышать мнение опытных программистов, так сказать, чтобы код был в хорошем тоне..
 

Hurghadahome

Почетный гражданин
Это тебе нужен не бот, а сову дописать. Ты хочешь, что бы закрывались только сделки, которые не подпадают под условие только? Т.е. они открылись по условию, а к закрытию свечи H4 условия уже не те, верно?
А ордера, которые не противоречат условиям должны остаться открыты?

Нет они не должны открыться вообще то есть конечно бот не может запретить но он может сразу закрыть. И не закрывать сделки которые происходят в разрешенный временной период(первые пол часа после закрытия 4х часовой свечи).

Это эксперт который будет разрешать работать трейдеру только после закрытия очередной четырехчасовой свечи. Эксперт часть системы манименеджмента. И на счет отложенников, можно было бы чтобы они смогли работать (открывать сделки)но при одном условии: эксперт удаляет все только что установленные отложенные ордера если они ближе к цене на N пунктов(расстояние вычисляется по волатильности инструмента).
Все это как помощник трейдеру в борьбе с самим собой не лезть в рынок, а работать только по4х часовым графикам и отложенными ордерами.
Уверен что в таком эксперте нуждается большинство трейдеров.
С уважением Илья.
 
Последнее редактирование:

hoz

Активный участник
НУЖЕН БОТ КОТОРЫЙ БУДЕТ ЗАКРЫВАТЬ ВСЕ ОТКРЫТЫЕ СДЕЛКИ ЕСЛИ ОНИ НЕ ПОДПАДАЮТ ПОД УСЛОВИЕ


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


Я типо всё понял...
 

Hurghadahome

Почетный гражданин
Поможешь?
Думаю это не супер как сложно.
Если что копеечку скину на кошелек.
С уважением Илья.
 

eevviill

Заблокирован
eevviill, то что ты написал, это, можно так выразиться, ф-ция определения нового бара.
Ну так всё правильно. Советник будет на открытии свечи проверять условия. Или тебе надо открыто в 15, проверка на следующий день в 15?

Всё. Понял. Но Time[0], я думаю нельзя использовать. Ровно через 24 часа именно такого времени может не быть. особенно если флэт.
 
Последнее редактирование:

greatiger

Активный участник
eevviill, привет, а есть какая-нибудь функция,чтобы MAX_Trades стандартно приделывать? (максимальное ограничение колен в мартинах ограничивать не через Макс.лот или просто число сделок в одну сторону (или даже обе))
 

eevviill

Заблокирован
Вшил ЗигЗаг в советник. Но новые пики не искались. Сделал обнуление буферов. Теперь пару десятков свечей работает и останавливается.

Всё. Проблему решил.
Добавил.

PHP:
int counted_bars = 0;
bool downloadhistory=false;

if (counted_bars==0 && downloadhistory) // history was downloaded
     {
      ArrayInitialize(ZigzagBuffer,0.0);
      ArrayInitialize(HighMapBuffer,0.0);
      ArrayInitialize(LowMapBuffer,0.0);
     }
   if (counted_bars==0) 
     {
      limit=Bars-ExtDepth;
      downloadhistory=true;
     }
   if (counted_bars>0) 
     {
 
Последнее редактирование:
Верх