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

scolfield

Интересующийся
Как вариант в интернетах поискать, или даже здесь по форуму, советники или индикаторы которые там нестандартные таймфреймы расчитывают, посмотреть, разобраться как это делается. А почему ничего не происходит, потому что тестер вон на паузе там стоит ).
Ну я не на столько уж))) Пауза была не при чем) Выше написал, что поправил в коде советника, чтобы решить проблему. Но все равно спасибо.

По версии метатриейдера - решил с БКС перейти на 5-ую версию. Нестандартные таймфреймы в MQL4 - это конечно задача интересная, но не является самоцелью))
 

scolfield

Интересующийся
Всем привет! Возникла проблема с WebRequest. Все делаю по методичке . Также добавил URL в Главное меню->Сервис->Настройки, вкладка "Советники"

Но при этом все равно получаю ошибки при тестировании советника с кодом 4014.

Кусок моего кода:

int res=WebRequest("POST",
url,
str,
500,
json_char,
result,
str);

if(res==-1)
{
Print("Ошибка в WebRequest. Код ошибки =",GetLastError());

Вот по условию res==-1 оно и отрабатывает

В чем может проблема ?
 
Последнее редактирование модератором:

scolfield

Интересующийся
UPD когда запускаю советника не в тесте, а в торговлю, то ошибка вываливается с кодом 400

код в целях отладки упростил до:
char z[2];

z[0]='Z';
z[1]='\0';

ResetLastError();
int res=WebRequest("POST",
url,
NULL,
500,
z,
result,
result_headers);
 
Последнее редактирование:

scolfield

Интересующийся
Использую библиотеку одного из наших товарищей -https://github.com/vivazzi/mql_requests/tree/main
Она основана на работе с wininet.dll

И вот проблема в том, что при использовании вылетает:
Access violation at 0x00007FFE071D1F34 read to 0x00007FFE00000000 in 'wininet.dll'

Может кто-то сталкивался ?

P.S. Использую MQL5
 
Последнее редактирование модератором:

Я_Эдуард

Прохожий
Попытка апроксимации линий канала ТМА процедурой из МА

У меня прикладная задача: 1. Главное. Сгладить(выгладить) линии канала индикатора ТМА рисующего. 2. Второстепенно. Точки мах и мин канала обозначать значками, типа как фракталы.

Поскольку квалификация «0» без палочки, попробовал решить ее доступным (как казалось мне) способом.

А) Попытался в индикаторах МА и ЕМА массив цены заменить на массив цен соответствующих одной из линий канала ТМА. После долгих мучений из-за «array out of range» с индексами получил таки следующую картину, какое то выглаживание есть, но индикатор рисует совсем не то. Результат сильное искажение линий канала ТМА рис. 1 – рис. 3.

Б) Для проверки, что данные из ТМА извлекаются верно, вставил их индикаторы «Фрактал» и «MACD” рис 4. Как будто Ок.

Может кто то исправит код в моем опусе индикатора «TMA_MA_only» код прилагается или может даже реализует прикладную задачу (в шапке).

Мой продукт индикатор «TMA_MA_only».
//+------------------------------------------------------------------+

//| Custom Moving Averages.mq4 |

//| Copyright 2005-2015, MetaQuotes Software Corp. |

//| MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader |

//+------------------------------------------------------------------+

#property copyright "2005-2015, MetaQuotes Software Corp."

#property link "MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader"

#property description "Moving Average"

#property strict



#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Red

//--- indicator parameters

extern string MA1="--------- К-во баров апроксимации ----------";

input int InpMAPeriod=5; // Period

extern string TMA1="--------- TMA ----------";

extern string TimeFrame = "60";

extern int HalfLength = 150;

extern int Price = PRICE_TYPICAL;

extern double ATRMultiplier = 4.5;

extern int ATRPeriod = 500;

extern bool Interpolate = true;

extern string Line="----- Какую линию ТМА сглаживать 0 средняя, 1- верняя, 2- нижняя ------";

extern int Nline = 0;



//input int InpMAShift=0; // Shift

input ENUM_MA_METHOD InpMAMethod=MODE_SMA; // Method

//--- indicator buffer

double ExtLineBuffer[];



double tmai, tmai2;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int OnInit(void)

{

string short_name;

int draw_begin=InpMAPeriod-1;

IndicatorShortName(short_name+string(InpMAPeriod)+")");

IndicatorDigits(Digits);

//--- check for input

if(InpMAPeriod<2)

return(INIT_FAILED);

//--- drawing settings

SetIndexStyle(0,DRAW_LINE);

// SetIndexShift(0,InpMAShift);

SetIndexDrawBegin(0,draw_begin);

//--- indicator buffers mapping

SetIndexBuffer(0,ExtLineBuffer);

//--- initialization done

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| Moving Average |

//+------------------------------------------------------------------+

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 &tick_volume[],

const long &volume[],

const int &spread[])

{

//--- check for bars count

if(rates_total<InpMAPeriod-1 || InpMAPeriod<2)

return(0);

//--- counting from 0 to rates_total

ArraySetAsSeries(ExtLineBuffer,false);

ArraySetAsSeries(close,false);

//--- first calculation or number of bars was changed

if(prev_calculated==0)

ArrayInitialize(ExtLineBuffer,0);

//+------------------------------------------------------------------+

//| simple moving average |

//+------------------------------------------------------------------+

int i,limit;

//--- first calculation or number of bars was changed

if(prev_calculated==0)

{

limit=InpMAPeriod;

//--- calculate first visible value

double firstValue=0;

for(i=0; i<limit; i++)

firstValue+=iCustom(NULL, 0, "TMAbistr_v2", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, Nline, i);//

// firstValue+=price;// исходн код

firstValue/=InpMAPeriod;

ExtLineBuffer[limit-1]=firstValue;

}

else

limit=prev_calculated-1;

//--- main loop

// int j;

for(i=limit; i<rates_total && !IsStopped(); i++)

ExtLineBuffer=ExtLineBuffer[i-1]+(iCustom(NULL, 0, "TMAbistr_v2", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, Nline, i)-

iCustom(NULL, 0, "TMAbistr_v2", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, Nline, (i-InpMAPeriod)))/InpMAPeriod;

// ---------- проба вар 4 => пробую делить только последн член ------------

// ExtLineBuffer=ExtLineBuffer[i-1]+iCustom(NULL, 0, "TMAbistr_v2", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, Nline, i)-

// (iCustom(NULL, 0, "TMAbistr_v2", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, Nline, (i-InpMAPeriod)))/InpMAPeriod;



Print(" op100 i = ",i," limit = ",limit," rates_total = ",rates_total," i-InpMAPeriod = ",i-InpMAPeriod );



// ---------- проба вар 3 => array out of range in ------------

// j=i-InpMAPeriod;// array out of range in

// ExtLineBuffer=ExtLineBuffer[i-1]+(iCustom(NULL, 0, "TMAbistr_v2", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, Nline, i)-

// iCustom(NULL, 0, "TMAbistr_v2", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, Nline, j))/InpMAPeriod;



// ExtLineBuffer=ExtLineBuffer[i-1]+(price-price[i-InpMAPeriod])/InpMAPeriod;// исходный код



return(rates_total);

}// OnCalculate

//+------------------------------------------------------------------+

//| exponential moving average |

//+------------------------------------------------------------------+
 
Последнее редактирование модератором:

Я_Эдуард

Прохожий
Я первый раз обращаюсь к форуму, не догадался как или не смог сразу присоединить как спойлер рисунки 1-4.
Рис. 1
индТМА_МА_only рис.png




Рис. 2 Увеличение периода МА с 5 до 30 выглаживает искаженный индикатором ТМА_МА_only.
индТМА_МА_only рис2.png


Рис. 3 Тот же график, ATR период увеличен с 15 до 500.

индТМА_МА_only рис3 сглаж.png


Рис. 4 Тот же график EURUSD, но Н1. В нем на среднюю линию канала нанесены фракталы (в индикаторе «фракталы» вместо массива МА вставлен массив ТМА).
ТМА_МАСД_Фракт.png
В подвале в индикаторе «МАСД» аналогично массив МА заменен массивом верхней линии канала ТМА.
Параметры ТМА ( TimeFrame = Н1, HalfLength = 150, ATRMultiplier = 4.5, ATRPeriod = 500 – сильное выглаживание ТМА)
По рис в подвале, по верхней линии канала ТМА видно, что линии канала ТМА плохо выглажены и если на эту линию нанести фракталы, то они не будут совпадать
с мах и мин основного графика, т.к. их будет много больше.
 
Последнее редактирование:

Я_Эдуард

Прохожий
Я первый раз обращаюсь к форуму, не догадался как или не смог сразу присоединить как спойлер рисунки 1-4.
Рис. 1
Посмотреть вложение 516054




Рис. 2 Увеличение периода МА с 5 до 30 выглаживает искаженный индикатором ТМА_МА_only.
Посмотреть вложение 516055


Рис. 3 Тот же график, ATR период увеличен с 15 до 500.

Посмотреть вложение 516056


Рис. 4 Тот же график EURUSD, но Н1. В нем на среднюю линию канала нанесены фракталы (в индикаторе «фракталы» вместо массива МА вставлен массив ТМА).
Посмотреть вложение 516057
В подвале в индикаторе «МАСД» аналогично массив МА заменен массивом верхней линии канала ТМА.
Параметры ТМА ( TimeFrame = Н1, HalfLength = 150, ATRMultiplier = 4.5, ATRPeriod = 500 – сильное выглаживание ТМА)
По рис в подвале, по верхней линии канала ТМА видно, что линии канала ТМА плохо выглажены и если на эту линию нанести фракталы, то они не будут совпадать
с мах и мин основного графика, т.к. их будет много больше.
Картинки к рисункам 2 и рис 3 перепутаны местами
 

Ugar

Гуру форума
Чёт давно не писал индюков с гистограммами. Вопрос по индикаторным буферам.
Хочу несколько гистограмм одна на другой. Но что бы на каждом баре менять порядок расположения.
Например 4 буфера, на заднем плане 4 буфер, потом 2, потом 1, и на переднем 3. На другом баре в другом порядке. Это вообще возможно?
 

vladradon

Программист
В 4-ке такого не сделаешь, т.к. все буферы выводятся на график последовательно и целиком - нет разделения на бары. А на 5-ке есть возможность для гистограммы задавать нужный цвет - такого рода смена не буферов, а подгонка нужного цвета и значения бара на нужный по очереди буфер -
DRAW_COLOR_HISTOGRAM или DRAW_COLOR_HISTOGRAM2.
 

AlexeyVik

Программист mql4 mql5
Чёт давно не писал индюков с гистограммами. Вопрос по индикаторным буферам.
Хочу несколько гистограмм одна на другой. Но что бы на каждом баре менять порядок расположения.
Например 4 буфера, на заднем плане 4 буфер, потом 2, потом 1, и на переднем 3. На другом баре в другом порядке. Это вообще возможно?
Менять на каждом баре не проверял, а так…
Можно проверить, ставишь условие и по этому условию заполняешь буферы в определённой последовательности.
1692341763510.png
 

AlexeNP

Гуру форума
Чёт давно не писал индюков с гистограммами. Вопрос по индикаторным буферам.
Хочу несколько гистограмм одна на другой. Но что бы на каждом баре менять порядок расположения.
Например 4 буфера, на заднем плане 4 буфер, потом 2, потом 1, и на переднем 3. На другом баре в другом порядке. Это вообще возможно?
Меняй толщину гистограмм
 

Ugar

Гуру форума
Менять на каждом баре не проверял, а так…
Можно проверить, ставишь условие и по этому условию заполняешь буферы в определённой последовательности.
Посмотреть вложение 519569
Привет! Вообще я пробовал в mql5 менять порядок присвоения значений ячейкам буферов. Они всё равно в порядке номеров буферов.
Конкретно котел расставлять в порядке убывания значения. Что бы все буфера были видны. Я бы применил одну разноцветную гистограмму, но нужно много, одна на другой.
Похоже придётся отказаться от буферов и собирать гистограмму из трендовых линий.
 

vladradon

Программист
Вообще я пробовал в mql5 менять порядок присвоения значений ячейкам буферов. Они всё равно в порядке номеров буферов.
Но ты ведь можешь и цвет задавать другой для гисты - к примеру у тебя на 1-м буфере расчет самый мелкий и его нужно на передний план - присваиваешь 4-му буферу (ячейке) это значение (4-й у нас на переднем плане) и присваиваешь цвет, который идет по умолчанию к 1-му буферу и все выстраивается таким образом. Только нужно учесть, что буферы должны быть чисто выходными и не участвовать в расчетах. Это на 5-ке.
 

AlexeyVik

Программист mql4 mql5
Привет! Вообще я пробовал в mql5 менять порядок присвоения значений ячейкам буферов. Они всё равно в порядке номеров буферов.
Конкретно котел расставлять в порядке убывания значения. Что бы все буфера были видны. Я бы применил одну разноцветную гистограмму, но нужно много, одна на другой.
Похоже придётся отказаться от буферов и собирать гистограмму из трендовых линий.
А сколько всего вариантов может быть?
 

Ugar

Гуру форума
А сколько всего вариантов может быть?
Всего около 60 буферов, у каждого свой символ. Каждый буфер только 1 цвет. Но получать значения (отображаться) будут 8, с самыми большими значениями на баре. То есть на каждом баре могут отображаться разные буфера, в зависимости от значения, а порядок по убывания значения.
 

Ugar

Гуру форума
Но ты ведь можешь и цвет задавать другой для гисты - к примеру у тебя на 1-м буфере расчет самый мелкий и его нужно на передний план - присваиваешь 4-му буферу (ячейке) это значение (4-й у нас на переднем плане) и присваиваешь цвет, который идет по умолчанию к 1-му буферу и все выстраивается таким образом. Только нужно учесть, что буферы должны быть чисто выходными и не участвовать в расчетах. Это на 5-ке.
Каждый буфер пренадлежит символу и должен отображаться символ при наведении мыши на кончик столбика гистограммы в подсказке.
Так что запихивать значения разных символов в буфер не прокатит.
 
Верх