2047728: Bonjour, j'ai commencé à étudier MQL4 en utilisant des tutoriels vidéo de 2013, je réécris le code exactement à partir de la vidéo, en ajoutant quelques modifications mineures d'une autre vidéo, comme résultat j'ai 25 erreurs. J'ai essayé de trouver une solution à ces erreurs, mais depuis que la version du terminal a été modifiée et que des changements ont été apportés au codage. Je serai reconnaissant si quelqu'un peut m'aider à modifier le code ou au moins me donner quelques conseils utiles, merci d'avance.
Et en quoi cela vous aide-t-il ? La prochaine fois, allez directement à Freelance.
Bonjour, j'ai commencé à étudier MQL4 en utilisant les tutoriels vidéo de 2013, j'ai réécrit le code exactement à partir de la vidéo, en ajoutant quelques modifications mineures d'une autre, selon mes besoins... Résultat, j'ai 25 erreurs. J'ai essayé de trouver une solution à ces erreurs, mais depuis que la version du terminal a été modifiée et que des changements ont été apportés au codage. Je serai reconnaissant si quelqu'un peut m'aider à modifier le code ou au moins me donner quelques conseils utiles, merci d'avance.
Ajoutez les changements un par un et corrigez les bogues - vous apprendrez étape par étape. Vous voulez apprendre la langue - commencez par des exemples simples
Bon après-midi! S'il vous plaît aidez-moi à comprendre le code indicateur. Il y a un niveau zéro, basé sur celui-ci, vous devez remplir le premier niveau. Ce que je ne fais pas, ce qui ne marche pas. Voici le code indicateur :
//+---------------------------------------------------------------------------------------------------------+//| Trend Levels.mq5 |//| Serzh |//+---------------------------------------------------------------------------------------------------------+#property copyright"Serzh"#property version"1.00"//--------------------------------Входные параметры----------------------------------------------------------#property indicator_chart_window// Индикатор отображается в окне графика#property indicator_buffers4// К-во индикаторных буферов#property indicator_plots2// К-во графических серий//--------------------------------Инициализация графических серий--------------------------------------------#property indicator_label1"Максимумы 1-го ровня"// Название индикаторной серии#property indicator_type1DRAW_ARROW// Тип линии индикатора#property indicator_color1clrDarkGreen// Цвет линии индикатора#property indicator_width12// Толщина линии индикатора#property indicator_label2"Минимумы 1-го ровня"// Название индикаторной серии#property indicator_type2DRAW_ARROW// Тип линии индикатора#property indicator_color2clrCrimson// Цвет линии индикатора#property indicator_width22// Толщина линии индикатора//--------------------------------Инициализация индикаторных массивов----------------------------------------double Max_1[],Min_1[]; // Индикаторные массивыdouble Max_0[],Min_0[]; // Вспомогательные массивы//+---------------------------------------------------------------------------------------------------------+//| Функция обработки события OnInit |//+---------------------------------------------------------------------------------------------------------+intOnInit ()
{
EventSetTimer ( _Period ); // Установка Таймера//-----------------------------------------------------------------------------------------------------------SetIndexBuffer ( 0 ,Max_1, INDICATOR_DATA ); // Присвоение индикаторного массива буферуSetIndexBuffer ( 1 ,Min_1, INDICATOR_DATA ); // Присвоение индикаторного массива буферуPlotIndexSetInteger ( 0 , PLOT_ARROW , 159 ); // Установка кода символа для PLOT_ARROWPlotIndexSetInteger ( 1 , PLOT_ARROW , 159 ); // Установка кода символа для PLOT_ARROWPlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,- 10 ); // Установка сдвига символа в пикселяхPlotIndexSetInteger ( 1 , PLOT_ARROW_SHIFT , 10 ); // Установка сдвига символа в пикселяхPlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0 ); // Установка пустого значенияPlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , 0 ); // Установка пустого значения//----------------------------------------------------------------------------------------------------------- SetIndexBuffer ( 2 ,Max_0, INDICATOR_CALCULATIONS ); // Присвоение индикаторного массива буферуSetIndexBuffer ( 3 ,Min_0, INDICATOR_CALCULATIONS ); // Присвоение индикаторного массива буферуArraySetAsSeries (Max_0, true ); // Установка индексаци массива как в таймсерииArraySetAsSeries (Min_0, true ); // Установка индексаци массива как в таймсерии//--------------------------------Инициализация массивов-----------------------------------------------------return ( INIT_SUCCEEDED );
}
//+---------------------------------------------------------------------------------------------------------+//| Функция обработки события OnCalculate |//+---------------------------------------------------------------------------------------------------------+intOnCalculate ( constint rates_total, // Всего баровconstint prev_calculated, // Расчитаных баровconstdatetime &time[], // Время открытияconstdouble &open[], // Цена открытияconstdouble &high[], // Максимальная ценаconstdouble &low[], // Минимальная ценаconstdouble &close[], // Цена закрытияconstlong &tick_volume[], // Тиковый объемconstlong &volume[], // Объемconstint &spread[]) // Спред
{
//--------------------------------Объявление переменных------------------------------------------------------int i0, i_1max, i_1min, i_1maxH= 0 , i_1minH= 0 ; // Индексыint Max_1Index= 0 , Min_1Index= 0 ; // Индексы максимальных и минимальных баровint Step_0, Step_1max, Step_1min; // Шаги цикловint Start_1max, Start_1min; // Стартовая позицияint Stop_1maxA= 0 , Stop_1minA= 0 , Stop_1maxB= 0 , Stop_1minB= 0 ; // Ограничитель дальнейших действийint Shift_max1= 0 , Shift_min1= 0 ; // Шифтыint TotalMax_0= 0 , TotalMin_0= 0 ; // Всего баров в нулевых массивахint TotalMax_1= 0 , TotalMin_1= 0 ; // Всего баров в массивах 1-го уровняint imax_0= 0 , imin_0= 0 , imax_1= 0 , imin_1= 0 ; // Инициализаторы массивов//--------------------------------Расчет 0-го уровня индикатора----------------------------------------------if (prev_calculated< 4 ) Step_0= 1 ; // Если расчетов еще небыло Step_0=1else Step_0=rates_total- 3 ; // Если расчеты уже были Step_0=rates_total-3for (i0=Step_0;i0<rates_total- 2 ;i0++) // Цикл для расчетов
{
if (high[i0+ 1 ]<high[i0] && high[i0]>=high[i0- 1 ]) Max_0[i0]=high[i0]; // Присвоение значения массиву Max_0else Max_0[i0]= 0 ; // Присвоение 0 значения массиву
TotalMax_0= ArrayRange (Max_0,imax_0); // Всего баров в массиве Max_0if (low[i0+ 1 ]>low[i0] && low[i0]<=low[i0- 1 ]) Min_0[i0]=low[i0]; // Присвоение значения массиву Min_0else Min_0[i0]= 0 ; // Присвоение 0 значения массиву
TotalMin_0= ArrayRange (Min_0,imin_0); // Всего баров в массиве Min_0
}
//--------------------------------Расчет максимума 1-го уровня индикатора------------------------------------if (TotalMax_1< 2 ) Step_1max= 1 ; // Если расчетов еще небыло Step_1max=1else Step_1max=TotalMax_0- 1 ; // Если расчеты уже были Step_1max=TotalMax_0-1for (i_1max=Step_1max;i_1max<TotalMax_0- 1 ;i_1max++) // Главный цикл для заполнения массива Max_1
{
if (Max_0[i_1max]>Min_0[i_1max] && Stop_1maxA< 1 ) // Нахождение ситуации когда Max_0 больше Min_0
{
Start_1max=i_1max; // Определение стартовой позиции
Stop_1maxA= 1 ; // Задается значение пераметру Stop_1maxA
Stop_1minA= 0 ; // Задается значение пераметру Stop_1minAfor (i_1maxH=i_1max;Max_0[i_1maxH]>=Min_0[i_1maxH];i_1maxH++) // Цикл для подсчета к-ва баров
{Shift_max1++;} // Подсчет к-ва баров для расчета максимального индекса
Max_1Index= ArrayMaximum (Max_0,Start_1max,Shift_max1); // Вычисление максимального индекса
}
if (i_1max==Max_1Index) Max_1[i_1max]=Max_0[i_1max]; // Присвоение значения массиву Max_1else Max_1[i_1max]= 0 ; // Присвоение 0 значения массиву Max_1
TotalMax_1= ArrayRange (Max_1,imax_1); // Всего баров в массиве Max_1if (Max_0[i_1max]<Min_0[i_1max] && Stop_1minA< 1 ) // Нахождение ситуации когда Max_0 меньше Min_0
{
Stop_1maxA= 0 ; // Изменение параметра Stop_1maxA
Stop_1minA= 1 ; // Изменение параметра Stop_1minA
}
}
//--------------------------------Расчет минимума 1-го уровня индикатора-------------------------------------if (TotalMin_1< 2 ) Step_1min= 1 ; // Если расчетов еще небыло Step_1min=1else Step_1min=TotalMin_0- 1 ; // Если расчеты уже были Step_1min=TotalMin_0-1for (i_1min=Step_1min;i_1min<TotalMin_0- 1 ;i_1min++) // Главный цикл для заполнения массива Min_1
{
if (Min_0[i_1min]>Max_0[i_1min] && Stop_1minB< 1 ) // Нахождение ситуации когда Min_0 больше Max_0
{
Start_1min=i_1min; // Определение стартовой позиции
Stop_1minB= 1 ; // Задается значение пераметру Stop_1minB
Stop_1maxB= 0 ; // Задается значение пераметру Stop_1maxBfor (i_1minH=i_1min;Min_0[i_1minH]>=Max_0[i_1minH];i_1minH++) // Цикл для подсчета к-ва баров
{Shift_min1++;} // Подсчет к-ва баров для расчета минимального индекса
Min_1Index= ArrayMinimum (Min_0,Start_1min,Shift_min1); // Вычисление максимального индекса
}
if (i_1min==Min_1Index) Min_1[i_1min]=Min_0[i_1min]; // Присвоение значения массиву Min_1else Min_1[i_1min]= 0 ; // Присвоение 0 значения массиву Min_1
TotalMin_1= ArrayRange (Min_1,imin_1); // Всего баров в массиве Min_1if (Min_0[i_1min]<Max_0[i_1min] && Stop_1maxB< 1 ) // Нахождение ситуации когда Min_0 меньше Max_0
{
Stop_1minB= 0 ; // Изменение параметра Stop_1minB
Stop_1maxB= 1 ; // Изменение параметра Stop_1maxB
}
}
//-------------------------------------------------------------- return (rates_total);
}
//+---------------------------------------------------------------------------------------------------------+//| Функция обработки события Таймер |//+---------------------------------------------------------------------------------------------------------+voidOnTimer (){}
//+---------------------------------------------------------------------------------------------------------+//+---------------------------------------------------------------------------------------------------------+//| Функция обработки события OnDeinit |//+---------------------------------------------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
EventKillTimer (); // Удаление ТаймераPrint ( __FUNCTION__ , "_Код причины деинициализации = " ,reason); // Причина деинициализации
}
Nous écrivons un script pour enregistrer les données du graphique dans un fichier *.csv (application s_ExportChartToCSV_v1.mq4) :
int start(){
int h=FileOpen(Symbol()+Period()+".csv",FILE_WRITE|FILE_CSV,",");
for(int i=Bars-1;i>=0;i--){
FileWrite(h,TimeToStr(Time[i],TIME_DATE),TimeToStr(Time[i],TIME_MINUTES),Open[i],High[i],Low[i],Close[i],Volume[i]);
}
FileClose(i);
return(0);
}
Exécuter le script sur des graphiques à échéances non standard. Suite à l'exécution du script, nous recevons des fichiers *.csv standard avec des données temporelles non standard dans le répertoire experts/filies.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Если можно сделаете скрипт
Цена на рынке меняется с достаточно большой частотой, чтобы для технического анализа было удобно пользоваться графиком непосредственного изменения цены, так называемого тикового графика. Для упрощения восприятия изменений цены и обеспечения возможности использования в анализе большие интервалы времени используется отображение графиков в виде...
pourquoi ne pas l'inclure dans la version HTML du rapport ?
Ça a toujours été comme ça.
C'est pourquoi les résultats des tests avec les mêmes paramètres peuvent être légèrement différents en raison des changements de swap. Ou les résultats de l'optimisation et des tests diffèrent, si l'optimisation a été longue et que le swap a changé pendant ce temps.
C'est pourquoi les résultats des tests avec les mêmes paramètres peuvent être légèrement différents en raison des changements de swap. Ou les résultats sont différents dans l'optimisation et les tests, si l'optimisation a été longue et que le swap a changé pendant ce temps.
Je n'ai jamais remarqué cela ! Je pensais qu'il n'y avait pas de swap dans mt4 dans le testeur de stratégie.
Dans le testeur de stratégie, l'ordre est modifié sans problème, mais sur un compte de démonstration, cette modification ne fonctionne pas.
Le Stop Loss est modifié. Dans le testeur, le stoploss peut être seulement à 1 pip du prix actuel, mais dans les comptes de démonstration, même si nous fixons le stoploss à une distance du spread + 6-8 pips de plus.
MODE_STOPLEVEL=0, MODE_FREEZELEVEL=0.
Veuillez m'indiquer pourquoi et comment effectuer la modification correcte.
Dans le testeur de stratégie, l'ordre est modifié sans problème, mais sur un compte de démonstration, cette modification ne fonctionne pas.
Le Stop Loss est modifié. Dans le testeur, le stoploss peut être seulement à 1 pip du prix actuel, mais dans les comptes de démonstration, même si nous fixons le stoploss à une distance du spread + 6-8 pips de plus.
MODE_STOPLEVEL=0, MODE_FREEZELEVEL=0.
Veuillez m'indiquer pourquoi et comment effectuer la modification correcte.
0 signifie un arrêt flottant. Dans le testeur, l'écart est fixe. Si vous définissez 1, alors 1 sera toujours là. Mais dans la vraie vie, ça flotte.
Bonjour, j'ai commencé à étudier MQL4 en utilisant des tutoriels vidéo de 2013, je réécris le code exactement à partir de la vidéo, en ajoutant quelques modifications mineures d'une autre vidéo, comme résultat j'ai 25 erreurs. J'ai essayé de trouver une solution à ces erreurs, mais depuis que la version du terminal a été modifiée et que des changements ont été apportés au codage. Je serai reconnaissant si quelqu'un peut m'aider à modifier le code ou au moins me donner quelques conseils utiles, merci d'avance.
Et en quoi cela vous aide-t-il ? La prochaine fois, allez directement à Freelance.
Bonjour, j'ai commencé à étudier MQL4 en utilisant les tutoriels vidéo de 2013, j'ai réécrit le code exactement à partir de la vidéo, en ajoutant quelques modifications mineures d'une autre, selon mes besoins... Résultat, j'ai 25 erreurs. J'ai essayé de trouver une solution à ces erreurs, mais depuis que la version du terminal a été modifiée et que des changements ont été apportés au codage. Je serai reconnaissant si quelqu'un peut m'aider à modifier le code ou au moins me donner quelques conseils utiles, merci d'avance.
Ajoutez les changements un par un et corrigez les bogues - vous apprendrez étape par étape. Vous voulez apprendre la langue - commencez par des exemples simples
Bon après-midi! S'il vous plaît aidez-moi à comprendre le code indicateur. Il y a un niveau zéro, basé sur celui-ci, vous devez remplir le premier niveau. Ce que je ne fais pas, ce qui ne marche pas. Voici le code indicateur :
Aidez-moi, s'il vous plaît.
Je ne parviens pas à créer un script sur ce sujet, voici la page https://www.mql5.com/ru/articles/1368.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Nous écrivons un script pour enregistrer les données du graphique dans un fichier *.csv (application s_ExportChartToCSV_v1.mq4) :
Exécuter le script sur des graphiques à échéances non standard. Suite à l'exécution du script, nous recevons des fichiers *.csv standard avec des données temporelles non standard dans le répertoire experts/filies.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Если можно сделаете скрипт
merci d'avance
depuis quand le testeur de stratégie a commencé à facturer le swap ?
ou je n'ai pas remarqué ?
pourquoi ne pas l'inclure dans la version HTML du rapport ?
depuis quand le testeur de stratégie a commencé à facturer le swap ?
ou je n'ai pas remarqué ?
pourquoi ne pas l'inclure dans la version HTML du rapport ?
Ça a toujours été comme ça.
C'est pourquoi les résultats des tests avec les mêmes paramètres peuvent être légèrement différents en raison des changements de swap. Ou les résultats de l'optimisation et des tests diffèrent, si l'optimisation a été longue et que le swap a changé pendant ce temps.
Cela a toujours été le cas.
C'est pourquoi les résultats des tests avec les mêmes paramètres peuvent être légèrement différents en raison des changements de swap. Ou les résultats sont différents dans l'optimisation et les tests, si l'optimisation a été longue et que le swap a changé pendant ce temps.
Je n'ai jamais remarqué cela ! Je pensais qu'il n'y avait pas de swap dans mt4 dans le testeur de stratégie.
Bonsoir à tous !
Dans le testeur de stratégie, l'ordre est modifié sans problème, mais sur un compte de démonstration, cette modification ne fonctionne pas.
Le Stop Loss est modifié. Dans le testeur, le stoploss peut être seulement à 1 pip du prix actuel, mais dans les comptes de démonstration, même si nous fixons le stoploss à une distance du spread + 6-8 pips de plus.
MODE_STOPLEVEL=0, MODE_FREEZELEVEL=0.
Veuillez m'indiquer pourquoi et comment effectuer la modification correcte.
Bonsoir à tous !
Dans le testeur de stratégie, l'ordre est modifié sans problème, mais sur un compte de démonstration, cette modification ne fonctionne pas.
Le Stop Loss est modifié. Dans le testeur, le stoploss peut être seulement à 1 pip du prix actuel, mais dans les comptes de démonstration, même si nous fixons le stoploss à une distance du spread + 6-8 pips de plus.
MODE_STOPLEVEL=0, MODE_FREEZELEVEL=0.
Veuillez m'indiquer pourquoi et comment effectuer la modification correcte.