Kira27: Quindi, volete creare sei maniglie di indicatori in OnInit per ricevere i dati di tutti i timeframe necessari?
Sì. Puoi creare sei variabili diverse per memorizzare i sei handle, oppure puoi (questa è l'opzione preferita) creare un array e memorizzare sei handle nell'array.
L'ho scritto così, va tutto bene, ma ingombrante))) Voglio concisione))) Qualche opzione?
//+------------------------------------------------------------------+//| 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
); */
}
//+------------------------------------------------------------------+
Indicatore MQL5
I valori del saldo e del capitale vengono scritti solo nell'elemento zero della matrice.
Ma quando eseguo l'indicatore, tali picchi appaiono su diversi array e in luoghi diversi.
Il codice in init per tutti gli array è lo stesso:
Come rimuoverlo?
Indicatore MQL5
I valori del saldo e del capitale sono scritti solo nell'elemento zero della matrice.
Ma quando eseguo l'indicatore, tali picchi appaiono su diversi array e in diversi luoghi.
Il codice in init per tutti gli array è lo stesso:
Come rimuoverlo?
Non dovete scrivere [0], dovete considerare prev_calculato e azzerare la barra precedente.
In effetti, esiste già un tale codice: LifeHack Balance Equ ity e LifeHack Balance Equity 2La maniglia dell'indicatore in MQL5 DEVE ESSERE CREATA UNA SOLA VOLTA!!! E deve essere fatto in OnInit()!!!
Quindi, volete creare 6 maniglie di indicatori in OnInit() per ricevere i dati di tutti i timeframe necessari?
No. Non è necessario se hai bisogno solo di uno dei sei. E non deve essere creato in OnInit(), l'importante è non creare un handle ad ogni tick.
Quindi, volete creare sei maniglie di indicatori in OnInit per ricevere i dati di tutti i timeframe necessari?
Sì. Puoi creare sei variabili diverse per memorizzare i sei handle, oppure puoi (questa è l'opzione preferita) creare un array e memorizzare sei handle nell'array.
Sono iscritto al segnale del fornitore di 0,02 lotti, ma il mio affare viene eseguito 0,01 per qualche motivo?
Le risposte alle domande più frequenti sono raccolte in una specialeFAQ sul servizio Signals
La prima cosa con cui dovreste familiarizzare:
Dimmi cosa c'è di sbagliato in questo codice
Dimmi cosa c'è di sbagliato in questo codice.
---
P.S. In generale, ci sono molte cose sbagliate, con lo stesso array per esempio.