[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 465

 
extralifes:

Aidez-moi à comprendre le code. Je ne sais pas comment décrire correctement cet état.

Voici un morceau de l'EA.

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
Une sorte de potager....
 
butthead:

Je comprends que le facteur psychologique m'empêche... la cupidité... la peur de perdre même 300 p... Que dois-je faire ?... Oubliez que le vrai compte...


Et si je changeais mon état d'esprit ? Pas "viser à gagner", mais "viser à ne pas perdre".
 

Aidez-nous à comprendre !

L'essence de l'idée : tant que l'iMACD augmente - nous maintenons l'achat, dès qu'il commence à diminuer - nous fermons l'achat et ouvrons la vente. La comparaison se fait en utilisant les trois dernières valeurs, à l'exclusion de la valeur actuelle.

Le code a un problème : il ouvre plusieurs ordres à des valeurs iMACD +-0, comme je le vois. Normalizedouble() n'aide pas.

Voici le code :

int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
 
extralifes:

Aidez-moi à comprendre le code. Je ne sais pas comment décrire correctement cet état.

Voici un morceau de l'Expert Advisor.


total=OrdersTotal();

if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7)) -какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3)) - какой оператор использовать и как его оформить?
{
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}
Pouvez-vous me dire comment le faire correctement ?


Est-ce que ça ne fonctionne pas comme ça ?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }
 

pas par le biais si ne fonctionne pas.

Cela devrait être le cas tant que la condition (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 est correcte, pour ouvrir uniquement un ordre de vente si iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

C'est la même chose en sens inverse.

Peut-on le faire par le biais de while ou de bool ? Je suis en pleine crise de programmation. Je comprends la chaîne logique, mais mes mains sont lentes à la convertir en code.

 
extralifes:

pas par le biais de si ne fonctionne pas.

Il devrait être tantque la condition (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 est correcte, d'ouvrir uniquement un ordre de vente à condition que iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

C'est la même chose en sens inverse.

Peut-on le faire par le biais de while ou de bool ? Je suis en pleine crise de programmation. Je comprends la chaîne logique, mais mes mains sont lentes à la convertir en code.

ouvert jusqu'à épuisement de l'argent ? ou ouvert une fois par barre ? ou une fois par tick ?
 

Bonjour ! Je ne veux pas (et je le fais parfois) me faire prendre par StopOut. J'ai décidé de limiter le lot avec une valeur, qui n'attraperait pas StopOut dans les pires conditions. J'ai fait des essais et des erreurs pendant longtemps. Peut-être que quelqu'un a une solution ?

Données d'entrée :

- paire de devises - pas nécessairement EURUSD

- prix (prix d'achat/de vente)

- le StopLoss spécifié en points (il est supposé que le pire scénario est de ne pas attraper un StopOut même si le niveau de StopLoss est atteint)

- fixer la valeur du lot

- Toutes les autres valeurs doivent être obtenues à l'aide des fonctions MT4 : Taille 1 lot, effet de levier, taux de croisement.

Un code serait souhaitable.

En théorie, je comprends ce dont j'ai besoin : le solde moins la perte possible au niveau du StopLoss divisé par la marge. Et cette valeur doit être plus grande que le StopOut (en pourcentage).

 
Cmu4:

Aidez-nous à comprendre !

L'essence de l'idée : tant que l'iMACD augmente - nous maintenons l'achat, dès qu'il commence à diminuer - nous fermons l'achat et ouvrons la vente. La comparaison se fait en utilisant les trois dernières valeurs, à l'exclusion de la valeur actuelle.

Le code a un problème : il ouvre plusieurs ordres à des valeurs iMACD +-0, comme je le vois. Normalizedouble() n'aide pas.

Voici le code :


int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2 &&  MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2 && MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
Peut-être que c'était le problème
 
ilunga:
ouvert jusqu'à épuisement de l'argent ? ou ouvert une fois par barre ? ou une fois par tick ?

La condition est vérifiée à chaque nouvelle barre. Dans ce cas, l'intervalle de temps est horaire. Cette condition est vérifiée au début de chaque heure.
 
Vinin:

Peut-être que c'était le problème

Non... j'ai fait comme vous l'avez suggéré - la même chose demeure.

J'ai également modifié le code, en le divisant séparément en blocs d'ouverture et de fermeture par conditions. C'est du pareil au même. Je ne sais pas ce qu'il faut faire maintenant.

Voici une capture d'écran du testeur, Expert Advisor pour le testeur dans le trailer :

Dossiers :
Raison: