À partir de deux points sur une ligne, vous pouvez trouver le prix d'un troisième point arbitraire sur cette ligne, également dans le futur (et vice versa).
Merci ! Je vais l'essayer.
P.S. La seule chose. Je ne comprends pas au premier coup d'œil. Cela fonctionnera-t-il dans le conseiller expert, dans MT4 ?
Bonjour, chers experts. J'ai besoin de votre aide pour corriger l'indicateur. L'essence de l'indicateur est la suivante. Calculez la valeur 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. La ligne 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.
Pouvez-vous, s'il vous plaît, m'aider avec un EA ?
Il effectue des transactions sur les signaux RSI des niveaux 30 et 70 dans la direction appropriée, crée une grille.
J'y ai intégré une sorte de % de stop loss, mais de temps en temps les ordres sont suspendus et ne se ferment pas jusqu'à ce que je les ferme manuellement ou que je vende le dépôt.
C'est-à-dire que ces ordres sont ouverts, le prix s'est déjà éloigné de 5000 pips et au-delà, mais ils sont toujours dans le rouge.
Vous devez trouver l'erreur. Si cela n'est pas possible, nous devons insérer un Stop Loss séparé en pips dans notre EA.
J'ai essayé de combiner 2 EAs en un seul, mais cela n'a pas fonctionné avec mes compétences.
Get a unique domain name plus our FREE value-added services to help you get the most from it. Call it a "dot-com name," a URL, or a domain. Whatever you call it, it's the cornerstone of your online presence, and we make getting one easy. Simply enter the name you want in the search field above, and we'll tell you instantly whether the name is...
Rebonjour. Veuillez prêter attention à la question d'un débutant. Je dois signaler les erreurs dans le code, car dans le testeur, le conseiller expert n'ouvre pas les ordres... Le compilateur ne montre aucune erreur ou avertissement, le même journal ne montre aucune erreur...
Question : Pourquoi mql5 calcule et affiche une expression inconnue pour moi comme 2.99999999 - (moins) 05 au lieu de la différence entre le prix actuel et la valeur de la variable Hay, qui devrait être <1 (comme dans mql4) ?
Comment faire pour que mql5 calcule correctement la différence entre ces valeurs ? Je normalise toutes les valeurs en utilisant NormalizeDouble(), mais les valeurs ci-dessus
sont affichées sans modification. Cela me semble étrange car les deux valeurs sont de type double.
Merci à tous pour votre aide.
#include <Trade\Trade.mqh>
int tm, s1 ;
double P=SymbolInfoDouble(Symbol(),SYMBOL_BID),S=P+0.0030,T=P-0.0010,Lou,Hay,DL=0.0030;
CTrade m_Trade; //структура для выполнения торговых операций//=============================================================================================================voidOnTick()
{
Print("===============",SymbolInfoDouble(Symbol(),SYMBOL_BID) - Hay,"===Hay====",Hay,"===SymbolInfoDouble()====",SymbolInfoDouble(Symbol(),SYMBOL_BID));
m_Trade.Sell(0.1,Symbol(),P,S,T);
Hay=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}
Bonjour Ivan, personne ne gronde les nouveaux venus ici, au contraire, ils essaient d'aider. Je suis moi-même un débutant. Maintenant, concernant votre question. Plusieurs positions sont ouvertes parce que le contrôle pour ouvrir une position a été effectué mais on a oublié de l'arrêter. L'opérateur return renvoie le contrôle au programme appelant (extrait de la référence MQL5).
Nous devons ajouter le retour au code de l'Expert Advisor (surligné en jaune) :
En outre, pour éviter que le compilateur ne génère des avertissements, une condition supplémentaire doit être ajoutée dans les conditions d'ouverture des positions d'achat et de vente pour vérifier OrderSend(mrequest,mresult). Cette condition est définie par l'opérateur if et doit ressembler à ceci
Une autre chose doit être prise en compte. Parfois, lors du passage d'un jour de bourse à un autre, à 23:59:59, une position ouverte se ferme, puis, à 00:00:00, une nouvelle position s'ouvre. Il s'agit de ce que l'on appelle le rollover close et le rollover open, qui dépendent du cambiste particulier et de ses conditions de trading. Cherchez dans le forum, j'ai des informations à ce sujet quelque part.
Sincèrement, Vladimir.
Bonjour.
Merci beaucoup pour votre réponse ! Mais je ne comprends pas pourquoi j'ai besoin de l'opérateur de retour? Il y a deux conditions dans ce code et la vérification doit s'arrêter lorsque l'une d'entre elles est remplie.
//--- есть ли открытые позиции?bool Buy_opened=false; // переменные, в которых будет храниться информация bool Sell_opened=false; // о наличии соответствующих открытых позицийif(PositionSelect(_Symbol)==true) // есть открытая позиция
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) // если истина, выполняем условие 1
{
Buy_opened=true; //это длинная позиция
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) // иначе выполняем условие 2
{
Sell_opened=true; // это короткая позиция
}
}
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.
À partir de deux points sur une ligne, vous pouvez trouver le prix d'un troisième point arbitraire sur cette ligne, également dans le futur (et vice versa).
Merci ! Je vais l'essayer.
P.S. La seule chose. Je ne comprends pas au premier coup d'œil. Cela fonctionnera-t-il dans le conseiller expert, dans MT4 ?
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+Bonjour !
Pouvez-vous, s'il vous plaît, m'aider avec un EA ?
Il effectue des transactions sur les signaux RSI des niveaux 30 et 70 dans la direction appropriée, crée une grille.
J'y ai intégré une sorte de % de stop loss, mais de temps en temps les ordres sont suspendus et ne se ferment pas jusqu'à ce que je les ferme manuellement ou que je vende le dépôt.
C'est-à-dire que ces ordres sont ouverts, le prix s'est déjà éloigné de 5000 pips et au-delà, mais ils sont toujours dans le rouge.
Vous devez trouver l'erreur. Si cela n'est pas possible, nous devons insérer un Stop Loss séparé en pips dans notre EA.
J'ai essayé de combiner 2 EAs en un seul, mais cela n'a pas fonctionné avec mes compétences.
Bonjour. Pouvez-vous me donner un indice ? J'ai besoin d'obtenir le nombre de points passés dans le dernier tick. Mais je n'y arrive pas.
Bonjour. Pouvez-vous me donner un indice ? J'ai besoin d'obtenir le nombre de points passés dans le dernier tick. Mais ça ne marche pas.
Essayez ça.
Essayez de cette façon.
Rebonjour.
Veuillez prêter attention à la question d'un débutant.
Je dois signaler les erreurs dans le code, car dans le testeur, le conseiller expert n'ouvre pas les ordres...
Le compilateur ne montre aucune erreur ou avertissement, le même journal ne montre aucune erreur...
Bonne journée à tous !
J'essaie de passer de mql4 à mql5.
Question : Pourquoi mql5 calcule et affiche une expression inconnue pour moi comme 2.99999999 - (moins) 05 au lieu de la différence entre le prix actuel et la valeur de la variable Hay, qui devrait être <1 (comme dans mql4) ?
Comment faire pour que mql5 calcule correctement la différence entre ces valeurs ? Je normalise toutes les valeurs en utilisant NormalizeDouble(), mais les valeurs ci-dessus
sont affichées sans modification. Cela me semble étrange car les deux valeurs sont de type double.
Merci à tous pour votre aide.
Bonjour Ivan, personne ne gronde les nouveaux venus ici, au contraire, ils essaient d'aider. Je suis moi-même un débutant. Maintenant, concernant votre question. Plusieurs positions sont ouvertes parce que le contrôle pour ouvrir une position a été effectué mais on a oublié de l'arrêter. L'opérateur return renvoie le contrôle au programme appelant (extrait de la référence MQL5).
Nous devons ajouter le retour au code de l'Expert Advisor (surligné en jaune) :
En outre, pour éviter que le compilateur ne génère des avertissements, une condition supplémentaire doit être ajoutée dans les conditions d'ouverture des positions d'achat et de vente pour vérifier OrderSend(mrequest,mresult). Cette condition est définie par l'opérateur if et doit ressembler à ceci
Une autre chose doit être prise en compte. Parfois, lors du passage d'un jour de bourse à un autre, à 23:59:59, une position ouverte se ferme, puis, à 00:00:00, une nouvelle position s'ouvre. Il s'agit de ce que l'on appelle le rollover close et le rollover open, qui dépendent du cambiste particulier et de ses conditions de trading. Cherchez dans le forum, j'ai des informations à ce sujet quelque part.
Sincèrement, Vladimir.
Bonjour.
Merci beaucoup pour votre réponse ! Mais je ne comprends pas pourquoi j'ai besoin de l'opérateur de retour? Il y a deux conditions dans ce code et la vérification doit s'arrêter lorsque l'une d'entre elles est remplie.
Ou pas ?