MetaTrader 4 Client Terminal build 646: Умный поиск, книги в Маркете и обновление окна параметров MQL4-программы - страница 32

 
ale002:
Проясните плз - сколько буферов надо резервировать под буфер типа DRAW_NONE? В справке - 1, но с #property indicator_buffers 1 компилятор предупреждает про indicator buffers amount is less than needed. С 2 - молчит об этом, значит по 2 на каждый DRAW_NONE и в справке ошибка?

Изменили поведение компилятора, при компиляции MQ4 не будет контролироваться количество заданных через #property indicator_buffers буферов.
 
prorab:

Что вы так "зациклились" на строке?
Просто, целочисленный массив передать можете?

А в dll пишете объединение (union {...}), в котором подгоняете по размеру массив и строку.

Передаете из MQL массив, а работаете в dll со строкой.

Как такой вариант? 

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


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

п.с. работало всё нормально, взяли испортили, повесили табличку революция, открыли революционный магазин и всё, а у меня сова не пашет)). 

 

Я так понимаю что кроме вырезок из теории никто не может реально это сделать чтобы работало? 

 
ale002:
Это другая тема, меня интересует именно DRAW_NONE - обычный буфер, у которого отключено отображение, но всё остальное на месте. Включая отображение значений в DataWindow. А всего буферов 18, из них 6 DRAW_NONE это знач мне надо щас сидеть разбираццо как правильно чередовать фантомные 2е буфера для DRAW_NONE. Оно конешна разберусь, но хотелось бы в след релизах обойтись без этого


Что-то я не понял, вот этот код индикатора ты пытаешься скомпилировать без ошибок?

// Тест.mq4

#property indicator_chart_window
#property indicator_buffers 2

#property indicator_color1      clrNONE
#property indicator_type1               DRAW_NONE

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &TickVolume[],
                const long &volume[],
                const int &Spread[]
        ) {
        return(rates_total);
}

А где объявлены массивы под буферы? А где инициализация? Или этого уже не надо и я безнадёжно отстал от жизни?

 
aleksandr25:


если нельзя передать строку, то массив тем паче). Там в инфе написано, что массивы и адреса передавать нельзя, в смысле указатели.

***

Не буду спорить, хотя в примере и передаются и возвращаются ссылки на СТАТИЧЕСКИЙ массив (запрет касается только динамического массива)

Примеры:

***
#import "ExpertSample.dll"
***
double GetArrayItemValue(double &arr[],int,int);
bool SetArrayItemValue(double &arr[],int,int,double);
***
#import
Хотя, конечно, реально могу только посочуствовать ...
 
prorab:

Не буду спорить, хотя в примере и передаются и возвращаются ссылки на СТАТИЧЕСКИЙ массив (запрет касается только динамического массива)

Хотя, конечно, реально могу только посочуствовать ...



В таких примерах и строки передаются). Только там видимо есть значение на каком языке dll написана. С++ строки представляет как массив символов, это удобно для работы со строками, но вот есть проблемы с передачей параметра, хотя до появления революционного магазина всё работало. Я практически ушёл от строк, практика показывает что это не надёжно). Но есть некоторые ситуации, когда необходимо передавать строку. Можно было бы через файл, но и  с файлами тут геморой)), они пишутся в двух папках и изменить их нельзя. Когда работает тестер то пишется в одну папку, когда работает нормально то в другую. В общем mql4 потихоньку херится, и я был прав когда выбрал стратегию минимум mql4 кода. Если всё заглохнет хоть функции останутся для работы с другим терминалом.
 

Перестала работать OrderCloseBy, выдаёт false. GetLastError() почему-то 3.

 
PMN81:

3

ERR_INVALID_TRADE_PARAMETERS

Неправильные параметры


В редакторе курсор поставь внутри скобок функции, нажмите Shift+Ctrl+Space и посмотрите какие требуются параметры.

Либо поставьте курсор на название функции и нажмите F1 для вызова справки.

 
artmedia70:

3

ERR_INVALID_TRADE_PARAMETERS

Неправильные параметры

В редакторе курсор поставь внутри скобок функции, нажмите Shift+Ctrl+Space и посмотрите какие требуются параметры.

Либо поставьте курсор на название функции и нажмите F1 для вызова справки.

Спасибо, но вроде правильно делаю:

Checked=OrderCloseBy(OrderTicketBuy,OrderTicketSell,Red); 

 
artmedia70:
 

Спасибо, но вроде правильно делаю:

Checked=OrderCloseBy(OrderTicketBuy,OrderTicketSell,Red); 

 

при создании таймера с EventSetMillisecondTimer(100)

при перекомпиляции таймер не вызывается , приходится акрывать график открывать новый и закидывать советника снова...

Установка удаление советника на старом графике не помогают  

OnTimer() не работает в тестере стратегий 

 EventSetMillisecondTimer(100)  при использованиии в справке написано 

В тестере стратегий используется минимальный интервал в 1000 миллисекунд. В общем случае при уменьшении периода таймера увеличивается время тестирования, так как возрастает количество вызовов обработчика событий таймера. При работе в режиме реального времени события таймера генерируются не чаще 1 раза в 10-16 миллисекунд, что связано с аппаратными ограничениями.

 

но ничего не работает .... 

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