Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 252
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
> err=StringToInteger((string)err)
cela devrait rester dans les annales ;-)
à l'origine dans err vous avez manifestement obtenu int de GetLastError(). Convertir le code d'erreur en description lisible ErrorDescription(err) ; à condition que #include <stdlib.mqh> soit activé.
mais la façon dont c'est écrit est une déception.
PS/ Et n'apprenez pas la programmation MQL. MQL 4 et 5 sont des langages cibles pour une plateforme particulière.
Pouvez-vous me dire si vous pouvez l'écrire de cette façon. il ne veut pas ouvrir les transactions. peut-être que le format des nombres calculés est mauvais ? ou d'autres défauts dans le code ?
double TakeLong(double shp)
{
int CurrentDayRange=0, fiveDayATR=0, take=0 ;
double TP_ATR=0 ;
//////Pivots
double P, S1, R1, S2, R2, S3, R3 ;
double LastHigh, LastLow, x ;
int counted_bars = IndicatorCounted() ;
int limite, i ;
shp=iHigh(Symbol(),PERIOD_D1,0) ;
//---- Calcul de l'indicateur de pivotement
si(barres comptées == 0)
{
x = Période() ;
si(x > 240)
retour(-1) ;
}
si(barres comptées < 0)
retour(-1) ;
limite = (Bars - counted_bars) - 1 ;
//----
for(i = limite ; i >= 0 ; i--)
{
si(High[i+1] > LastHigh)
LastHigh = High[i+1] ;
//----
si(Low[i+1] < LastLow)
LastLow=Low[i+1] ;
if(TimeDay(Time[i]) != TimeDay(Time[i+1])
{
P = (LastHigh + LastLow + Close[i+1]) / 3 ;
R1 = (2*P) - LastLow ;
S1 = (2*P) - LastHigh ;
R2 = P + (LastHigh - LastLow) ;
S2 = P - (LastHigh - LastLow) ;
R3 = (2*P) + (LastHigh - (2*LastLow)) ;
S3 = (2*P) - ((2* LastHigh) - LastLow) ;
LastLow = Open[i] ;
LastHigh = Open[i] ;
}
}
////ATR calcul
pour (i=1;i<6;i++)
{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}
FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits()) ;
CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)) ;
si(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange ; sinon TP_ATR=0 ;
si (Bid>R1 && TP_ATR==0) take=shp ;
sinon si (Bid<R1 && R1<TP_ATR) take=R1 ;
sinon, take=TP_ATR ;
retour (prise) ;
}
Le code proposé ressemble à un indicateur. Les transactions sont ouvertes par un conseiller expert ou un script. L'appel de la fonction OrderSend n' est pas autorisé dans l'indicateur. L'indicateur peut s'alarmer - insérez l'appel de la fonction Alerte ou le son à l'endroit approprié
Le code proposé est similaire à l'indicateur. Les transactions sont ouvertes par un conseiller expert ou un script. L'appel de la fonction OrderSend est interdit dans l'indicateur. L'indicateur peut signaler - insérer l'appel ou le son de la fonction d'alerte à l'endroit approprié
C'est le code de définition du TP, qui envoie le résultat à OrderSend. Sans cet algorithme complexe, les transactions sont envoyées, mais il n'y a aucun moyen de les envoyer. J'appelle la fonction TP = TakeLong(SHP) ;
Il existe de nombreuses façons de déboguer - le processus qui consiste à trouver une erreur lorsqu'il est établi qu'il y en a une. La première est F5 - démarrer le débogage dans MetsEditor. 2) utiliser Alerts pour tracer l'exécution. 3 et 4) produisent des informations de débogage dans les étiquettes de texte et la fonction Commentaire. Choisissez le moyen le plus pratique et déboguez cette fonction simple - vous deviendrez alors un programmeur. Un programme comportant des milliers de lignes est considéré comme complexe.
Pouvez-vous me dire si vous pouvez l'écrire de cette façon. il ne veut pas ouvrir les transactions. peut-être que le format des nombres calculés est mauvais ? ou un autre défaut dans le code ?
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
Dans le code complet, cela ressemble à cela
double Close1 = iClose(Symbol(), 0, i) ;
double Open1 = iOpen(Symbol(), 0, i) ;
double Close2 = iClose(Symbol(), 0, i+1) ;
double Open2 = iOpen(Symbol(), 0, i+1) ;
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
if (Close1 < Open1 && Close2 > Open2){
BUY() ;
}
if (Close1 > Open1 && Close2 < Open2){
SELL() ;
}
Est-ce correct ? Comment faire pour que ça marche ?
L'avez-vous essayé sur le compte de démonstration M1 ? Qu'est-ce que vous obtenez ?
L'avez-vous essayé sur un compte de démonstration M1 ? Comment ça se passe ?
Pouvez-vous me dire pourquoi le chalut est déclenché à chaque tick?