Kira27: Entonces, ¿quieres crear seis indicadores en OnInit para recibir datos de todos los plazos necesarios?
Sí. Puedes crear seis variables diferentes para almacenar las seis asas, o puedes (esta es la opción preferida) crear un array y almacenar seis asas en el array.
Lo escribí así, todo está bien, pero engorroso))) Quiero concisión))) ¿Alguna opción?
//+------------------------------------------------------------------+//| Fraktal_Time_Frame.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//_____________________________________Массивы для фракталов____________________________________double FractalDown_W1[],FractalUP_W1[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_D1[],FractalUp_D1[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_H4[],FractalUp_H4[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_1H[],FractalUp_1H[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_30[],FractalUp_30[]; // одномерный динамический массив, так как в [] пустоdouble FractalDown_15[],FractalUp_15[]; // одномерный динамический массив, так как в [] пусто//____________________________________Переменные под хендлы____________________________________int Fractal_W1;
int Fractal_D1;
int Fractal_H4;
int Fractal_1H;
int Fractal_30;
int Fractal_15;
//_____________________________________________________________________________________________datetime Time_Mass_OLD[ 7 ]; //массивы для нранения времени открытия нулевого бараdatetime Time_Mass_NEW[ 7 ]; //ассивы для нранения времени открытия нулевого бара//+------------------------------------------------------------------+intOnInit ()
{
Fractal_W1= iFractals ( Symbol (), PERIOD_W1 );
Fractal_D1= iFractals ( Symbol (), PERIOD_D1 );
Fractal_H4= iFractals ( Symbol (), PERIOD_H4 );
Fractal_1H= iFractals ( Symbol (), PERIOD_H1 );
Fractal_30= iFractals ( Symbol (), PERIOD_M30 );
Fractal_15= iFractals ( Symbol (), PERIOD_M15 );
Time_Mass_OLD[ 1 ]= iTime ( NULL , PERIOD_W1 , 0 );
CopyBuffer (Fractal_W1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalUP_W1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_W1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[ 2 ]= iTime ( NULL , PERIOD_D1 , 0 );
CopyBuffer (Fractal_D1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalUp_D1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_D1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[ 3 ]= iTime ( NULL , PERIOD_H4 , 0 );
CopyBuffer (Fractal_H4, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalUp_H4); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_H4, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[ 4 ]= iTime ( NULL , PERIOD_H1 , 0 );
CopyBuffer (Fractal_1H, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalUp_1H); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_1H, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalDown_1H); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[ 5 ]= iTime ( NULL , PERIOD_M30 , 0 );
CopyBuffer (Fractal_30, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalUp_30); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_30, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
Time_Mass_OLD[ 6 ]= iTime ( NULL , PERIOD_M15 , 0 );
CopyBuffer (Fractal_15, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalUp_15); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_15, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях./* Alert("OnInit");
ArrayRemove(FractalDown_W1,0,WHOLE_ARRAY);
ArrayPrint(
FractalUP_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
ArrayRemove(FractalUp_1H,0,WHOLE_ARRAY);
ArrayPrint(
FractalDown_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
); *///------------------------------------------------------------------return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
Time_Mass_NEW[ 1 ]= iTime ( NULL , PERIOD_W1 , 0 );
Time_Mass_NEW[ 2 ]= iTime ( NULL , PERIOD_D1 , 0 );
Time_Mass_NEW[ 3 ]= iTime ( NULL , PERIOD_H4 , 0 );
Time_Mass_NEW[ 4 ]= iTime ( NULL , PERIOD_H1 , 0 );
Time_Mass_NEW[ 5 ]= iTime ( NULL , PERIOD_M30 , 0 );
Time_Mass_NEW[ 6 ]= iTime ( NULL , PERIOD_M15 , 0 );
for ( int tik = 1 ; tik <= 6 ; tik++)
{
if (Time_Mass_NEW[tik]!=Time_Mass_OLD[tik])
{
switch (tik)
{
case1 :
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer (Fractal_W1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalUP_W1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_W1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case2 :
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer (Fractal_D1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalUp_D1); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_D1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case3 :
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer (Fractal_H4, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalUp_H4); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_H4, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case4 :
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer (Fractal_1H, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalUp_1H); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_1H, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalDown_1H); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case5 :
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer (Fractal_30, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalUp_30); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_30, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
case6 :
Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
CopyBuffer (Fractal_15, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalUp_15); // заполнение масива FractalUp[] верхними фракталами на дневном графикеCopyBuffer (Fractal_15, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике//--- индексация как в таймсерияхArraySetAsSeries (FractalUP_W1, true ); //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серииArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
;
break ;
}
}
}
/* int n=0;
//----------------------------------------------------
//--- 1 далее используем оператор цикла for для поиска первого верхнего фрактала
int i=Bars(Symbol(),PERIOD_W1); //Колличество баров на H1 графике
for(n=0; n< i; n++)
{
//--- если непустое значение, прерываем цикл
if(FractalUP_W1[n]!=EMPTY_VALUE)
break;
}
//--- запишем ценовое значение первого фрактала в переменную UpFractal_1 из массива с индексом где обнаружился верхний фрактал
double UpFractal_1=FractalUP_W1[n];
Alert("UpFractal_1= ",UpFractal_1);
//---
ArrayPrint(
FractalUP_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
ArrayPrint(
FractalDown_W1, // выводимый массив
0, // количество десятичных знаков после запятой
NULL, // разделитель между значениями полей структуры
0, // индекс первого выводимого элемента
WHOLE_ARRAY, // количество выводимых элементов
ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
); */
}
//+------------------------------------------------------------------+
Indicador MQL5
Los valores de balance y patrimonio se escriben sólo en el elemento cero de la matriz.
Pero cuando ejecuto el indicador, esos picos aparecen en diferentes matrices y en diferentes lugares.
El código en init para todos los arrays es el mismo:
¿Cómo eliminarlo?
Indicador MQL5
Los valores de balance y patrimonio se escriben sólo en el elemento cero de la matriz.
Pero cuando ejecuto el indicador, esos picos aparecen en diferentes matrices y en diferentes lugares.
El código en init para todos los arrays es el mismo:
¿Cómo eliminarlo?
NO DEBE escribir [0], debe considerar prev_calculado y poner a cero la barra anterior.
De hecho, ya existe un código de este tipo: LifeHack Balance Equity y LifeHack Balance Equity 2¡¡¡La manija del indicador en MQL5 DEBE CREARSE UNA VEZ!!! ¡¡Y debe hacerse en OnInit()!!
Entonces, ¿quieres crear 6 indicadores en OnInit() para recibir los datos de todos los plazos necesarios?
No. No es necesario si sólo necesitas uno de los seis. Y no tiene que ser creado en OnInit(), lo principal es no crear un handle en cada tick.
Entonces, ¿quieres crear seis indicadores en OnInit para recibir datos de todos los plazos necesarios?
Sí. Puedes crear seis variables diferentes para almacenar las seis asas, o puedes (esta es la opción preferida) crear un array y almacenar seis asas en el array.
Estoy suscrito a la señal del Proveedor de 0,02 lotes, pero mi operación se ejecuta 0,01 por alguna razón?
Las respuestas a las preguntas más populares están recogidas en unaFAQ especialsobre el servicio de Señales
Lo primero con lo que debes familiarizarte:
Dígame qué tiene de malo este código
Dígame qué tiene de malo este código.
---
P.D. En general, hay muchas cosas que están mal, con la misma matriz por ejemplo.