Vous ne savez pas comment vérifier si la valeur de retour est nulle ? Et je ne sais pas comment quitter OnCalculate() avec un retour de zéro ? N'avez-vous jamais essayé de rechercher des informations sur le site web ?
Obtenir la valeur requise de la fonction
Vérifiez si elle est égale à zéro
S'il est égal à zéro, alors il renvoie 0 ;
S'il n'est pas égal à zéro, passez à l'étape 3.
Travailler avec cette valeur
Je n'ai jamais pensé que je raconterai les bases de la logique sur cette ressource à un homme dont l'évaluation dépasse 13 mille...
Il ne s'agit pas d'un indicateur.
J'ai intentionnellement spécifié si je devais faire des vérifications à chaque appel ou si une vérification au début de OnTick est suffisante...
Les retours ne sont pas acceptables pour moi ... et de boucler l'attente dans le testeur est impossible, et dans le réel devrait travailler (ou pas ?).
Je ne suis pas un programmeur et j'apprends ce métier compliqué uniquement grâce à des personnes comme vous. J'apprécie vraiment les commentaires de personnes compétentes.
Bonjour. Pour une raison quelconque, Handel ne transmet que lorsqu'il est réglé sur toutes les périodes, mais j'ai réglé sur une période spécifique et il n'y a rien. Je ne sais pas quel est le problème. J'ai essayé de taper dans le manuel directement et non à partir de variables globales, le résultat est le même. Qu'est-ce qu'il y a ? J'ai besoin que la valeur soit d'une seule période.
//+------------------------------------------------------------------+//| 77777.mq5 |//| Copyright 2019, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers1#property indicator_plots0//+----------------------------------------------+//| Параметры отрисовки индикатора 1 |//+----------------------------------------------+//----inputstring xBars="2018.11.19 00:00"; //Дата начала отсчетаinputbool DataBars=false; //Считать по дате (true)inputint InpMAShift=1; //Сдвиг бара расчета inputENUM_TIMEFRAMES Timeframes=PERIOD_D1; //Таймфрейм скользящейinputENUM_MA_METHOD Method=MODE_EMA; //Метод расчета скользящейinputENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; //Расчет цены скользящейinputENUM_LINE_STYLE MAStyle=STYLE_DASH; //Стиль всех скользящих линийinputint InpMAPeriod1=5; //Скользящая 1 периода//----int handle_ma,shift;
double BufferPrice[];
//---int period;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
period=(InpMAPeriod1<1 ? 1 : InpMAPeriod1);
//---SetIndexBuffer(2,BufferPrice,INDICATOR_CALCULATIONS);
ArraySetAsSeries(BufferPrice,true);
//--- create MA's handlesResetLastError();
//----------------------------------------------------------------+// ПРОБЛЕМА ТУТ ////----------------------------------------------------------------+
handle_ma=iMA(NULL,PERIOD_D1,period,0,MODE_SMA,PRICE_CLOSE); //ПРОБЛЕМА ТУТ
// handle_ma=iMA(NULL,PERIOD_CURRENT,period,0,MODE_SMA,PRICE_CLOSE); // БЕЗ ПРОБЛЕМЫif(handle_ma==INVALID_HANDLE)
{
Print("The iMA (",(string)period,") object was not created: Error ",GetLastError());
returnINIT_FAILED;
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function | //+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ObjectDelete(0,"Proba");
Comment("");
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баровif(rates_total<4) return0;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated;
if(limit>1)
{
limit=rates_total-1;
ArrayInitialize(BufferPrice,0);
}
//--- Подготовка данныхint count=(limit>1 ? rates_total : 2),copied=0;
copied=CopyBuffer(handle_ma,0,0,count,BufferPrice);
if(copied!=count) return0;
//---- if(DataBars==false)
shift=InpMAShift;
else
shift=iBarShift(NULL,PERIOD_CURRENT,StringToTime(xBars));
double ma1=BufferPrice[shift];
datetime tm=iTime(NULL,Timeframes,shift);
Comment(NormalizeDouble(BufferPrice[shift],_Digits)," ",shift);
HLine("Proba","",tm,ma1,MAStyle,1,Red);
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+void HLine(string name,
string text,
datetime tm,
double price,
int stl,
int wid,
color clr)
{
if(ObjectFind(0,name)!=0)
{
ObjectCreate(0,name,OBJ_HLINE,0,tm,price);
ObjectSetInteger(0,name,OBJPROP_TIME, tm);
ObjectSetString(0,name,OBJPROP_TEXT,text);
ObjectSetString(0,name,OBJPROP_FONT,"Times New Roman");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,name,OBJPROP_STYLE, stl);
ObjectSetInteger(0,name,OBJPROP_WIDTH, wid);
ObjectSetInteger(0,name,OBJPROP_COLOR, clr);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
}
}
kopeyka2: Bonjour. Je ne trouve rien, pour une raison quelconque le handel ne se transfère que lorsqu'il est réglé sur toutes les périodes, mais je le règle sur une certaine période et rien ne se passe. Je ne sais pas quel est le problème. J'ai essayé d'entrer des données ne provenant pas de variables globales directement dans le manuel, le résultat est le même. Qu'est-ce qu'il y a ?
ResetLastError();
if(CopyBuffer(handle_ma,0,0,count,BufferPrice)<0)
{
PrintFormat("Failed to copy data from the handle_ma indicator, error code %d",GetLastError());
return(0.0);
}
// copied=CopyBuffer(handle_ma,0,0,count,BufferPrice);
Étudiez l'erreur, Artem a raison de dire qu'il faut tout vérifier 10 fois...
2019.01.2520:12:26.169 Test777 (Si Splice,M1) Failed to copy data from the handle_ma indicator, error code 4806
ERR_INVALID_ARRAY
4006
Tableau de type inadéquat, de taille inadéquate ou objet de tableau dynamique corrompu
kopeyka2: Bonjour. J'ai remarqué que le handel n'est transféré que lorsqu'il est réglé pour toutes les périodes, mais lorsque je le règle pour une certaine période, rien ne se passe. Je ne comprends pas quel est le problème. J'ai essayé de taper directement dans le manuel et non dans les variables globales, le résultat est le même. Qu'est-ce qu'il y a ? J'ai besoin que la valeur soit de la même période.
Vous prenez des exemples dans la CodeBase des indicateurs de Scriptor, n'est-ce pas ? N'est-ce pas ? Regardez ensuite dans son code (récemment publié) les exemples qui ont MTF dans leur nom, mais sans MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Par exemple, si vous voulez obtenir des données sur le symbole actuel, mais à partir d'un autre cadre temporel que la période du graphique, vous avez besoin d'un exemple d'indicateur multi-cadres temporels. Dans MCP, vous ne devriez pas encore vous impliquer - il s'agit de la POO avec l'utilisation des classes standard. Vous serez confus.
C'est uniquement pour les MA travaillant sur la période et le symbole actuels. Pour travailler sur une période différente, le calcul sera différent. Cherchez - tout est proche, et la direction que je vous ai donnée.
Vous prenez des exemples dans la CodeBase des indicateurs de Scriptor, n'est-ce pas ? N'est-ce pas ? Regardez ensuite dans son code (récemment publié) les exemples qui ont MTF dans leur nom, mais sans MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Par exemple, si vous voulez obtenir des données sur le symbole actuel, mais à partir d'un autre cadre temporel que la période du graphique, vous avez besoin d'un exemple d'indicateur multi-cadres temporels. Dans MCP, vous ne devriez pas encore vous impliquer - il s'agit de la POO avec l'utilisation des classes standard. Vous serez confus.
Par exemple, ce calcul :
c'est uniquement pour les MA travaillant sur la période et le symbole actuels. Pour un travail sur une période différente, le calcul sera différent. Recherche - tout est proche, et je vous ai donné la direction.
S'il te plaît, mais j'ai copié la mauvaise erreur, ça devrait être
ERR_INDICATEUR_DATA_NOT_FOUND
4806
Les données demandées n'ont pas été trouvées
Le fait est que le nombre de barres est différent pour les différentes TF et qu'il faut en tenir compte.
Je ne faisais que vérifier. Mais le PROBLÈME, c'est qu'après avoir fixé Handel sur une période constante, en
CopyBuffer la valeur sur d'autres horizons temporels n'est PAS PERMANENTE. Sur la période de la poignée fixée, la valeur était, mais sur les plus petits délais, 0,0 (zéro). Il est parti à la recherche du tampon... zéro. Pourquoi n'est-il pas passé àCopyBuffer ?
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Comment trouver la raison de ce message ?
Profiler
Vous ne savez pas comment vérifier si la valeur de retour est nulle ? Et je ne sais pas comment quitter OnCalculate() avec un retour de zéro ? N'avez-vous jamais essayé de rechercher des informations sur le site web ?
Il ne s'agit pas d'un indicateur.
J'ai intentionnellement spécifié si je devais faire des vérifications à chaque appel ou si une vérification au début de OnTick est suffisante...
Les retours ne sont pas acceptables pour moi ... et de boucler l'attente dans le testeur est impossible, et dans le réel devrait travailler (ou pas ?).
Je ne suis pas un programmeur et j'apprends ce métier compliqué uniquement grâce à des personnes comme vous. J'apprécie vraiment les commentaires de personnes compétentes.
Merci de votre compréhension.
Profiler
Et si ça arrive une fois par jour ou moins ?
Bonjour. Je ne trouve rien, pour une raison quelconque le handel ne se transfère que lorsqu'il est réglé sur toutes les périodes, mais je le règle sur une certaine période et rien ne se passe. Je ne sais pas quel est le problème. J'ai essayé d'entrer des données ne provenant pas de variables globales directement dans le manuel, le résultat est le même. Qu'est-ce qu'il y a ?
Étudiez l'erreur, Artem a raison de dire qu'il faut tout vérifier 10 fois...
ERR_INVALID_ARRAY
4006
Tableau de type inadéquat, de taille inadéquate ou objet de tableau dynamique corrompu
ERR_INDICATEUR_DATA_NOT_FOUND
4806
Données demandées non trouvées
Bonjour. J'ai remarqué que le handel n'est transféré que lorsqu'il est réglé pour toutes les périodes, mais lorsque je le règle pour une certaine période, rien ne se passe. Je ne comprends pas quel est le problème. J'ai essayé de taper directement dans le manuel et non dans les variables globales, le résultat est le même. Qu'est-ce qu'il y a ? J'ai besoin que la valeur soit de la même période.
Vous prenez des exemples dans la CodeBase des indicateurs de Scriptor, n'est-ce pas ? N'est-ce pas ? Regardez ensuite dans son code (récemment publié) les exemples qui ont MTF dans leur nom, mais sans MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Par exemple, si vous voulez obtenir des données sur le symbole actuel, mais à partir d'un autre cadre temporel que la période du graphique, vous avez besoin d'un exemple d'indicateur multi-cadres temporels. Dans MCP, vous ne devriez pas encore vous impliquer - il s'agit de la POO avec l'utilisation des classes standard. Vous serez confus.
Par exemple, ce calcul :
C'est uniquement pour les MA travaillant sur la période et le symbole actuels. Pour travailler sur une période différente, le calcul sera différent. Cherchez - tout est proche, et la direction que je vous ai donnée.
Vous prenez des exemples dans la CodeBase des indicateurs de Scriptor, n'est-ce pas ? N'est-ce pas ? Regardez ensuite dans son code (récemment publié) les exemples qui ont MTF dans leur nom, mais sans MCP.
MTF = MultiTimeFrame, MCP = MultiCurrencyPair. Par exemple, si vous voulez obtenir des données sur le symbole actuel, mais à partir d'un autre cadre temporel que la période du graphique, vous avez besoin d'un exemple d'indicateur multi-cadres temporels. Dans MCP, vous ne devriez pas encore vous impliquer - il s'agit de la POO avec l'utilisation des classes standard. Vous serez confus.
Par exemple, ce calcul :
c'est uniquement pour les MA travaillant sur la période et le symbole actuels. Pour un travail sur une période différente, le calcul sera différent. Recherche - tout est proche, et je vous ai donné la direction.
Étudiez l'erreur, Artem a raison de dire qu'il faut tout vérifier 10 fois...
ERR_INVALID_ARRAY
4006
Tableau de type inadéquat, de taille inadéquate ou objet de tableau dynamique corrompu
Merci.
S'il te plaît, mais j'ai copié la mauvaise erreur, ça devrait être
ERR_INDICATEUR_DATA_NOT_FOUND
4806
Les données demandées n'ont pas été trouvées
Le fait est que le nombre de barres est différent pour les différentes TF et qu'il faut en tenir compte.
S'il te plaît, mais j'ai copié la mauvaise erreur, ça devrait être
ERR_INDICATEUR_DATA_NOT_FOUND
4806
Les données demandées n'ont pas été trouvées
Le fait est que le nombre de barres est différent pour les différentes TF et qu'il faut en tenir compte.
Je ne faisais que vérifier. Mais le PROBLÈME, c'est qu'après avoir fixé Handel sur une période constante, en
CopyBuffer la valeur sur d'autres horizons temporels n'est PAS PERMANENTE. Sur la période de la poignée fixée, la valeur était, mais sur les plus petits délais, 0,0 (zéro). Il est parti à la recherche du tampon... zéro. Pourquoi n'est-il pas passé àCopyBuffer ?