[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 466

 
Cmu4:

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, EA pour le testeur est dans le trailer :


Vous pourriez procéder comme suit, avec un contrôle de position ouvert
Dossiers :
 
Vinin:

Cela pourrait être quelque chose comme ça, avec un contrôle des positions ouvertes.


On a aussi pensé dans ce sens. Mais je suis intéressé par l'erreur elle-même. Où se trouve-t-elle ?

p.s. Merci d'avoir ajouté au code ! Lorsqu'il est compilé, il se plaint d'un order_type indéfini, dans la fonction Closeall.

 
Cmu4:


On a aussi pensé dans ce sens. Mais je suis intéressé par l'erreur elle-même. Où se trouve-t-elle ?

p.s. Merci d'avoir ajouté au code ! Lorsqu'il est compilé, il jure sur un type d'ordre indéfini, dans la fonction Closeall.


void Closeall(int OP=-1)
{
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if(OrderSymbol()==Symbol())
         { 
            if (OrderType()==OP || OP=-1) 
            {
               if(OrderType()==OP_BUY)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               else if(OrderType()==OP_SELL)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
            }
         } 
      }
   }
}
 
Cmu4:

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 d'un testeur, le conseiller expert est dans la remorque :

J'ai besoin de savoir : les positions sont-elles ouvertes à la suite comme cela ? Acheter, Vendre, Acheter, Vendre, etc. ou consécutives, par exemple Acheter.

Je pense que vous avez des positions d'achat et de vente qui s'ouvrent successivement.

La raison : les MACDs comparées sont très proches et changent de place (plus grande est plus petite) rapidement. Par conséquent, une condition est d'abord remplie, puis l'autre.

Solution :

if (MA1-MA2 > 0.0001 &&  MA2-MA3 > 0.0001 && Napr==1) //или другая константа
 
extralifes:

pas par le biais si ne fonctionne pas.

Il devrait être tant que 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 pour l'exécuter en code.


Donc ce n'est pas le problème... tout devrait fonctionner si... Cela fonctionne de cette façon - tant que (votre même while) la condition (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 - est remplie et que RSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7), alors on ouvre seulement le profit...

Vous n'avez pas besoin de bool ici - pourquoi traiter avec des drapeaux, quand tout est clair que si toutes ces conditions sont remplies, nous ouvrons des ordres d'achat ou de vente ?

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);

  }

Regardez attentivement une fois de plus.

Cherchez l'erreur ailleurs dans le code. Vous écrivez "cela ne fonctionne pas avec if" - expliquez-le plus en détail - que dit-il dans le "log" ?

 
ikatsko:

Bonjour, je ne veux pas (et je le fais parfois) toucher un StopOut. J'ai décidé de limiter le lot à une valeur qui ne "prendrait" 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 initiales :

- Paire de devises - pas nécessairement EURUSD

- prix (prix d'achat/de vente)

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

- valeur spécifiée du lot

- Les autres valeurs doivent être renseignées à l'aide des fonctions MT4 : Taille 1 lot, effet de levier, taux de croisement.

De préférence un code.

En théorie, je comprends ce qui est nécessaire : solde moins la perte possible au niveau du StopLoss divisé par la marge. Et cette valeur doit être supérieure au StopOut (en pourcentage).

Quelque chose comme ça

int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
if (AccountStopoutMode==0)
  {
   double Marga = NormalizeDouble(MarketInfo("EURUSD", MODE_MARGINREQUIRED), 2);
   double TickValue = NormalizeDouble(MarketInfo("EURUSD", MODE_TICKVALUE), 2);
   int SL = 26;////Пунктов
   double lotsShortNaVSE = NormalizeDouble(AccountBalance() / (level * Marga / 100.0 + SL * TickValue ), 2);
  }

Le nombre de lots ne doit pas être supérieur au nombre de lotsShortNaVSE

SL ---- est une perte possible sur votre position ouverte.

Et les sociétés de courtage ont leur propre perception des pertes possibles.

C'est pourquoi nous devons prendre le nombre maximal auprès de vous ou de la société de courtage. Par exemple, en ce moment, le centre des croupiers pour la paire EURUSD a une perte possible SL = 26.

SL = MathMax(VashSLvPunktah, SLvPunktahUVashegoDillinga);
Y a-t-il d'autres options ?
 
rlx:


Et les sociétés de courtage ont également leur propre vision de la perte possible.

C'est pourquoi vous devez prendre le maximum de votre perte ou de celle de votre société de courtage. Par exemple, en ce moment, la société de courtage a une perte possible SL = 26 pour EURUSD.

Peut-être existe-t-il d'autres variantes ?


C'est ainsi que l'on calcule cette vue du DC.

Mais cela est plus critique pour les traders à court terme.

 

Par exemple, si vous avez un stopLoss de 5 points, le nombre de lots ouverts sera naturellement beaucoup calculé.

Mais ouvrir un tel poste ne fonctionnera pas, car les sociétés de courtage ont leur propre système de gestion des risques.

 
rlx:


La seule chose est de savoir comment calculer cette vue du DC.

Mais cela est plus critique pour les personnes qui travaillent à court terme.


Bonne journée ! Aidez-moi, s'il vous plaît. J'ai besoin d'un script qui fixe automatiquement le stop et le profit pendant le trading manuel. Pensez-vous que c'est possible et si cela existe, donnez-moi un lien.
 
Cmu4:

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, EA pour le testeur est dans le trailer :

Tant que la condition MAKDak est remplie, les ordres s'ouvriront également par lots sur chaque tick.

Ajouter aux conditions
Pour les positions d'achat : S'il n'y a PAS d'ordre d'achat sur le marché, alors ouvrez-le...
Pour les positions de vente : S'il n'y a PAS d'ordre de vente sur le marché, ouvrez-le...

Et le problème sera résolu.

Raison: