void OnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10&&Hour()<11) return (0);
......остальной код, в частности для открытия....
}
выдает ошибку: 'return' - 'void' function returns a value
Vitaly Muzichenko:
voidOnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
......остальной код, в частности для открытия....
}
Bonjour, qu'en est-il de OrdersTotal() ? J'ai toujours su qu'il contient le nombre d'ordres -1, c'est-à-dire OrdersTotal()-1 et tout fonctionnait, mais j'ai commencé à écrire un programme et soudain, un ordre n'est plus compté, j'ai demandé OrdersTotal() et il m'a donné le nombre total d'ordres = 3, au lieu de 3-1. Que se passe-t-il ?
La forme habituelle de la boucle dans l'aide :
int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { }
C'est-à-dire que le premier ordre est égal à zéro.
Mais non, en fait, le premier ordre est 1, ce qui signifie que nous devons commencer la recherche à partir de 1 et non de zéro ? Les métacitations ont-elles fait quelque chose de mal ou suis-je stupide ?
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
Maksim Mihajlov: Bonjour, que se passe-t-il avec OrdersTotal() ? J'ai toujours su qu'il contient le nombre de commandes -1, c'est-à-dire OrdersTotal()-1, et tout fonctionnait, mais j'ai commencé à écrire un programme et soudain une commande n'est pas comptée. J'ai demandé OrdersTotal() et il dit total des commandes = 3, au lieu de 3-1. Que se passe-t-il ?
La forme habituelle de la boucle dans l'aide :
int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { }
C'est-à-dire que le premier ordre est égal à zéro.
Mais non, en fait, le premier ordre est 1, ce qui signifie que nous devons commencer la recherche à partir de 1 et non de zéro ? Les métacitations ont-elles fait quelque chose de mal, ou suis-je stupide ?
Vous avez confondu les ORDRES RELATIFS et les POISONS. Lisez la référence. Soyez plus précis dans votre question : qu'essayez-vous de compter : les ORDRES SUPPRIMÉS ou les POSITIONS ? Et oui, rien n'a changé : l'indice du premier élément commence par "0".
Vous avez confondu les ORDRES RELATIFS et les POSITIONS. Lisez la référence. Formulez votre question de manière plus précise : qu'essayez-vous de compter : ORDRES RETRAITÉS ou POSTES ? Et oui, rien n'a changé : l'indice du premier élément commence par "0".
Je veux dire le MQL4, pas le MQL5, il n'y a pas de division entre en attente et en attente de marché !
Vous êtes en train d'écrire dans le forum MQl5. Vous écrivez dans la section principale. Vous postez dans le forum MQL5 - et vous obtiendrez des réponses sur MQL5.
Les questions relatives à l'ancien terminal sont adressées à la section spéciale : MQL4 et MetaTrader 4. A partir de maintenant, écrivez là. Je lui transmettrai vos questions.
J'ai comparé deux variantes, dans la première, j'ai utilisé OrdersTotal()-1 et j'ai commencé la recherche à partir de zéro - j'ai obtenu l'erreur . Dans la deuxième variante, j'ai commencé par un et j'ai pris la totalité de OrdersTotal() - pas d'erreur cette fois-ci
Dans les captures d'écran, vous pouvez voir que OrdersTotal() indique le nombre réel de commandes, et non OrdersTotal()-1...
Laquestion est de savoir pourquoi OrdersTotal() affiche le nombre réel de commandes, plutôt que -1, devrait-il en être ainsi ou s'agit-il d'une nouveauté ? Car dans ce cas, nous devons commencer la recherche non pas à partir de zéro, mais à partir de un !
J'ai comparé deux variantes, dans la première, j'ai utilisé OrdersTotal()-1 et j'ai commencé la recherche à partir de zéro - j'ai obtenu l'erreur . Dans la deuxième variante, j'ai commencé par un et j'ai pris la totalité de OrdersTotal() - pas d'erreur cette fois-ci
Dans les captures d'écran, vous pouvez voir que OrdersTotal() indique le nombre réel de commandes, et non OrdersTotal()-1...
Laquestion est de savoir pourquoi OrdersTotal() affiche le nombre réel de commandes, plutôt que -1, devrait-il en être ainsi ou s'agit-il d'une nouveauté ? Car dans ce cas, nous devons commencer la recherche non pas à partir de zéro, mais à partir de un !
Je pense avoir compris mon erreur, désolé... Il y a un décalage de -1 dans cette condition : if (OrderSelect(i-1,SELECT_BY_POS)==true){} Désolé d'être brutal, j'ai pris la chaîne d'un autre programme et n'ai pas fait attention au décalage !
Bonjour. J'ai besoin de votre aide pour corriger l'indicateur. L'essence de l'indicateur est la suivante. Calculez l'ampleur de l'augmentation du prix par rapport à la barre précédente. Pour zéro, il faut une barre d'étoile. C'est-à-dire que le prix d'ouverture est égal au prix de clôture. Lors de la compilation aucune erreur, mais lors du test une erreur sur la ligne 80 20 caractères. Laligne de signal estégalement mal dessinée. Mais je pense que c'est la raison du calcul incorrect du tampon principal. Veuillez m'aider à le réparer.
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.
J'ai toujours su qu'il contient le nombre d'ordres -1, c'est-à-dire OrdersTotal()-1 et tout fonctionnait, mais j'ai commencé à écrire un programme et soudain, un ordre n'est plus compté, j'ai demandé OrdersTotal() et il m'a donné le nombre total d'ordres = 3, au lieu de 3-1.
Que se passe-t-il ?
La forme habituelle de la boucle dans l'aide :
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
C'est-à-dire que le premier ordre est égal à zéro.
Mais non, en fait, le premier ordre est 1, ce qui signifie que nous devons commencer la recherche à partir de 1 et non de zéro ?
Les métacitations ont-elles fait quelque chose de mal ou suis-je stupide ?
Bonjour, que se passe-t-il avec OrdersTotal() ?
J'ai toujours su qu'il contient le nombre de commandes -1, c'est-à-dire OrdersTotal()-1, et tout fonctionnait, mais j'ai commencé à écrire un programme et soudain une commande n'est pas comptée. J'ai demandé OrdersTotal() et il dit total des commandes = 3, au lieu de 3-1.
Que se passe-t-il ?
La forme habituelle de la boucle dans l'aide :
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
C'est-à-dire que le premier ordre est égal à zéro.
Mais non, en fait, le premier ordre est 1, ce qui signifie que nous devons commencer la recherche à partir de 1 et non de zéro ?
Les métacitations ont-elles fait quelque chose de mal, ou suis-je stupide ?
Vous avez confondu les ORDRES RELATIFS et les POISONS. Lisez la référence. Soyez plus précis dans votre question : qu'essayez-vous de compter : les ORDRES SUPPRIMÉS ou les POSITIONS ? Et oui, rien n'a changé : l'indice du premier élément commence par "0".
Ajouté : exemple
Exemple : Calculer les positions et les ordres en suspens
Vous avez confondu les ORDRES RELATIFS et les POSITIONS. Lisez la référence. Formulez votre question de manière plus précise : qu'essayez-vous de compter : ORDRES RETRAITÉS ou POSTES ? Et oui, rien n'a changé : l'indice du premier élément commence par "0".
Ajouté : exemple
Exemple : Calculer les positions et les ordres en suspens
Je veux dire MQL4, pas MQL5, il n'y a pas de différence entre les ordres en attente et les ordres au marché !
Je veux dire le MQL4, pas le MQL5, il n'y a pas de division entre en attente et en attente de marché !
Vous êtes en train d'écrire dans le forum MQl5. Vous écrivez dans la section principale. Vous postez dans le forum MQL5 - et vous obtiendrez des réponses sur MQL5.
Les questions relatives à l'ancien terminal sont adressées à la section spéciale : MQL4 et MetaTrader 4. A partir de maintenant, écrivez là. Je lui transmettrai vos questions.
J'ai comparé deux variantes, dans la première, j'ai utilisé OrdersTotal()-1 et j'ai commencé la recherche à partir de zéro - j'ai obtenu l'erreur
. Dans la deuxième variante, j'ai commencé par un et j'ai pris la totalité de OrdersTotal() - pas d'erreur cette fois-ci
Dans les captures d'écran, vous pouvez voir que OrdersTotal() indique le nombre réel de commandes, et non OrdersTotal()-1 ...
Laquestion est de savoir pourquoi OrdersTotal() affiche le nombre réel de commandes, plutôt que -1, devrait-il en être ainsi ou s'agit-il d'une nouveauté ?
Car dans ce cas, nous devons commencer la recherche non pas à partir de zéro, mais à partir de un !
J'ai comparé deux variantes, dans la première, j'ai utilisé OrdersTotal()-1 et j'ai commencé la recherche à partir de zéro - j'ai obtenu l'erreur
. Dans la deuxième variante, j'ai commencé par un et j'ai pris la totalité de OrdersTotal() - pas d'erreur cette fois-ci
Dans les captures d'écran, vous pouvez voir que OrdersTotal() indique le nombre réel de commandes, et non OrdersTotal()-1 ...
Laquestion est de savoir pourquoi OrdersTotal() affiche le nombre réel de commandes, plutôt que -1, devrait-il en être ainsi ou s'agit-il d'une nouveauté ?
Car dans ce cas, nous devons commencer la recherche non pas à partir de zéro, mais à partir de un !
Je pense avoir compris mon erreur, désolé...
Il y a un décalage de -1 dans cette condition :
if (OrderSelect(i-1,SELECT_BY_POS)==true){}
Désolé d'être brutal, j'ai pris la chaîne d'un autre programme et n'ai pas fait attention au décalage !
//+------------------------------------------------------------------+ //| MSBB.mq4 | //| 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" #property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 1 input int InpMSBBPeriod=3; // Period input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA; // Method //--- indicator buffers double ExtMSBBBuffer[]; double ExtTempBuffer[]; double ExtPriceBuffer[]; double ExtSignalBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorDigits(Digits-2); //--- drawing settings IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMSBBBuffer); SetIndexBuffer(1,ExtSignalBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,ExtTempBuffer); SetIndexBuffer(2,ExtPriceBuffer); SetIndexDrawBegin(1,InpMSBBPeriod); //--- name for DataWindow and indicator subwindow label IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")"); SetIndexLabel(0,"MSBB"); SetIndexLabel(1,"Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i;//limit; //------ if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2) return(0); /*//--- counting from 0 to rates_total ArraySetAsSeries(ExtMSBBBuffer,false); ArraySetAsSeries(ExtSignalBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false);*/ //--- // limit=rates_total-prev_calculated; //if(prev_calculated>0) // limit++; //--- typical price and its moving average for(i=0; i<rates_total; i++) { ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2); //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i]; //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]); if(ExtTempBuffer[i]==0) ExtMSBBBuffer[i]=0.0; if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i]=0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open>0 && price_close<0)||(price_open<0 && price_close>0)) ExtMSBBBuffer[i]=0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } //--- signal line counted in the 2-nd buffer //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0); SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer); Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]); //--- done } /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0) { ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i]; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } if(ExtPriceBuffer[i]==0) { ExtMSBBBuffer[i] = 0.0; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } }*/ //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+