C'est fait, j'ai créé un modèle vide et préparé tout ce qui est nécessaire pour la fonction iCustom().
J'ai mis l'indicateur iCrossAD qui m'intéresse dans la fonction.
La fonction fonctionne, elle trouve correctement les indices des flèches Up et Down les plus extérieures, mais les valeurs de prix auxquelles ces flèches ont été fixées sont fausses.
Le code est court, donc je vais le mettre ici, je vais joindre les fichiers de ce conseiller et de l'indicateur juste au cas où.
//+------------------------------------------------------------------+//| TestDoEasyPart08.mq5 |//| Copyright 2018, MetaQuotes Software Corp. |//| https://mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://mql5.com/ru/users/artmedia70"#property version"1.00"#property description""#property strict//--- includes#include <DoEasy\Engine.mqh>
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
//---inputstring Inp_param_indi_iCrossAD = "Input parameters indicator iCrossAD";//----- "Внешние параметры индикатора iCrossAD" -----inputuint InpPeriodFind = 400; // Bars for calculateinputuint InpUnheckedBars = 2; // Unchecked barsinputuint InpPeriodIND = 21; // CCI period//--- global variables
CEngine engine;
CTrade trade;
CPositionInfo apos;
CSymbolInfo asymbol;
uint period_find = InpPeriodFind; //Number bars for calculateint CrossAD; //Хэндл индикатора iCrossADdouble Buf_Arrow_Sell[], //Массив буфера для приема значений последних стрелок ВНИЗ из индикатора iCrossAD
Last_Arrow_Sell_volume, //Переменная для записи значения цены последней стрелки ВНИЗ индикатора iCrossAD
Last_Arrow_Sell_index; //Переменная для записи значения индекса свечи последней стрелки ВНИЗ индикатора iCrossAD
double Buf_Arrow_Buy[], Last_Arrow_Buy_volume, Last_Arrow_Buy_index;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
ArraySetAsSeries(Buf_Arrow_Buy, true);
ArraySetAsSeries(Buf_Arrow_Sell, true);
//---
CrossAD = iCustom(asymbol.Name(), _Period, "iCrossAD");
if (CrossAD == INVALID_HANDLE)
{
Print("Не удалось создать описатель индикатора iCrossAD!");
return(INIT_FAILED);
}
elsePrint("Хендл iCrossAD = ",CrossAD);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- delete objectsObjectsDeleteAll(0,"",-1);
Comment("");
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
int n=0;
if (CopyBuffer(CrossAD, 1, 0, period_find, Buf_Arrow_Buy) != period_find)
{
Print("НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d",GetLastError());
return;
}
for(n=0; n<period_find; n++)
{
if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
}
Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
Last_Arrow_Buy_index = n;
Print("Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,", Last_Arrow_Buy_index = ",Last_Arrow_Buy_index);
if (CopyBuffer(CrossAD, 2, 0, period_find, Buf_Arrow_Sell) != period_find)
{
Print("НЕ удалось правильно скопировать данные из 2-го буфера индикатора iCrossAD, error code %d",GetLastError());
return;
}
for(n=0; n<period_find; n++)
{
if(Buf_Arrow_Sell[n]!=EMPTY_VALUE)break;
}
Last_Arrow_Sell_volume = Buf_Arrow_Sell[n];
Last_Arrow_Sell_index = n;
Print("Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume,", Last_Arrow_Sell_index = ",Last_Arrow_Sell_index);
Comment("-------------------------",
"\n Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,
"\n Last_Arrow_Buy_index = ",Last_Arrow_Buy_index,
"\n ---------------------- ",
"\n Last_Arrow_Sell_volume = ",Last_Arrow_Sell_volume,
"\n Last_Arrow_Sell_index = ",Last_Arrow_Sell_index
);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
if(!MQLInfoInteger(MQL_TESTER))
engine.OnTimer();
}
Appuyez sur Ctrl+D, faites glisser la souris le long des lignes de l'indicateur et regardez dans la fenêtre de données pour voir quelles sont les valeurs de ses tampons.
Si j'ai bien compris, je cherchais un chat dans une pièce qui n'est pas là ? Le tableau n'était pas rempli avec des prix, mais avec les valeurs de l'indicateur à ce moment-là ? Merci, je vais y repenser.
Une dernière question - le compilateur me donne 2 avertissements
non-concordance des signes Test_iCustom.mq5 79 20
non-concordance des signes Test_iCustom.mq5 92 20
Je ne peux pas comprendre leur raison, s'il vous plaît dites-moi. Que signifie "sign mismatch" (traducteur Yandex) ? ???
Si j'ai bien compris, je cherchais un chat dans une pièce qui n'est pas là ? Le tableau n'était pas rempli avec des prix, mais avec les valeurs de l'indicateur à ce moment-là ? Merci, je vais y repenser.
Une dernière question - le compilateur me donne 2 avertissements
non-concordance des signes Test_iCustom.mq5 79 20
non-concordance des signes Test_iCustom.mq5 92 20
Je ne peux pas comprendre leur raison, s'il vous plaît dites-moi. Que signifie "non-concordance des signes" (traducteur Yandex) ?
Vous pourriez perdre un signe numérique. Montrez ces lignes de code.
Pouvez-vous me dire ce qui ne va pas avec le rationnement du lot ?
Tout est faux. Lisez l'article "Quels sont les contrôles qu'une EE doit passer...". Il y a là une fonction toute prête.
C'est fait, j'ai créé un modèle vide et préparé tout ce qui est nécessaire pour la fonction iCustom().
J'ai mis l'indicateur iCrossAD qui m'intéresse dans la fonction.
La fonction fonctionne, elle trouve correctement les indices des flèches Up et Down les plus extérieures, mais les valeurs de prix auxquelles ces flèches ont été fixées sont fausses.
Le code est court, donc je vais le mettre ici, je vais joindre les fichiers de ce conseiller et de l'indicateur juste au cas où.
Voici à quoi ressemblent les entrées du journal de l'onglet "Experts".
2019.05.20 15:11:15.025 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = -11211905.17483469, Last_Arrow_Buy_index = 5.0
2019.05.20 15:11:15.025 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = -11203799.85975282, Last_Arrow_Sell_index = 50.0
2019.05.20 15:11:16.798 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = -11211905.17483469, Last_Arrow_Buy_index = 5.0
2019.05.20 15:11:16.798 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = -11203799.85975282, Last_Arrow_Sell_index = 50.0
Voici à quoi ressemblent les entrées du journal dans l'onglet "Experts".
2019.05.20 15:11:15.025 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = -11211905.17483469, Last_Arrow_Buy_index = 5.0
Au lieu du prix auquel les flèches ont été créées = -11211905.17483469
Sergey Voytsekhovsky:
...
Au lieu des prix auxquels les flèches ont été créées = -11211905.17483469
Appuyez sur Ctrl+D, déplacez la souris le long des lignes de l'indicateur et voyez dans la fenêtre de données quelles sont les valeurs de ses tampons.
Appuyez sur Ctrl+D, faites glisser la souris le long des lignes de l'indicateur et regardez dans la fenêtre de données pour voir quelles sont les valeurs de ses tampons.
Si j'ai bien compris, je cherchais un chat dans une pièce qui n'est pas là ? Le tableau n'était pas rempli avec des prix, mais avec les valeurs de l'indicateur à ce moment-là ? Merci, je vais y repenser.
Une dernière question - le compilateur me donne 2 avertissements
non-concordance des signes Test_iCustom.mq5 79 20
non-concordance des signes Test_iCustom.mq5 92 20
Je ne peux pas comprendre leur raison, s'il vous plaît dites-moi. Que signifie "sign mismatch" (traducteur Yandex) ? ???
Si j'ai bien compris, je cherchais un chat dans une pièce qui n'est pas là ? Le tableau n'était pas rempli avec des prix, mais avec les valeurs de l'indicateur à ce moment-là ? Merci, je vais y repenser.
Une dernière question - le compilateur me donne 2 avertissements
non-concordance des signes Test_iCustom.mq5 79 20
non-concordance des signes Test_iCustom.mq5 92 20
Je ne peux pas comprendre leur raison, s'il vous plaît dites-moi. Que signifie "non-concordance des signes" (traducteur Yandex) ?
Vous pourriez perdre un signe numérique. Montrez ces lignes de code.
Vous pourriez perdre un signe numérique. Montrez ces lignes de code.
La seconde est exactement la même (boucles pour trouver des valeurs non nulles dans les tableaux "Flèches").
Quels sont les types de variables n et period_find ? La chose la plus importante qu'ils n'ont pas montrée...
Essayez-le :
Pourquoi déclarez-vous une variable de boucle au niveau du gestionnaire OnTick() ?
Vous pouvez le faire de cette façon :
Vous pouvez supprimer la déclaration n de OnTick() - nous n'en avons pas besoin ici.
Quels sont les types de variables n et period_find ? La chose la plus importante et non montrée...