[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 88

 

Très bien. Ne le faisons pas. Nous semblons tous deux ne pas avoir assez de connaissances. L'auteur de la question a demandé comment modifier StopLoss. Je ne pense pas qu'il va aller dans les profondeurs.

Essayez de l'affecter après la fonction OrderSend

 
MaxZ:

A quoi correspond le chiffre "12" dans la fonction OrderSend ? :(

Et vous m'avez mal compris au sujet de la sélection des commandes... C'est comme ça que ça devrait être :

Salut !

Merci beaucoup ! !! pour vos réponses ! !!

Je n'ai pas dû l'exprimer correctement : l'idée est la suivante :

Un trade de vente est effectué à 1.4545... le prix va contre la tendance - 1.4585... et ALORS - un ordre en attente devrait être placé à 1.4565.

mon code ne fonctionne pas correctement :

void otlogka (int order)
{  
   int a, k=OrdersTotal();
   for (a=k-1; a>=0; a--){
         if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES)){
            if (OrderType()==OP_BUY){
               if (Bid*Point-OrderOpenPrice()>40)
               RefreshRates();
               if (k>1){
                  {
                     order=OrderSend(Symbol(),OP_SELLLIMIT,0.02,OrderOpenPrice()+20*Point,1,SL,0,"Otlogka",mn,5,0);
                  }}}}}
    
           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

}

S'il vous plaît, aidez-moi ! !!

 
FOReignEXchange:

Je vous ai dit que pendant l'exécution de la fonction OrderSend, le prix peut changer. Vous devez donc l'attribuer après coup, lorsqu'elle a déjà changé.

Vous pouvez le faire de cette façon :

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, 0, 0, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         SL = OrderOpenPrice()-StopLoss*Point;
         TP = OrderOpenPrice()+TakeProfit*Point;
         
         Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
         if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
            Alert("Ордер Buy ", Ticket, " модифицирован.");
         else
            Alert("Ошибка: ", GetLastError());
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}
Il y a des avantages et des inconvénients à chaque approche.
 
smartemiy:

Salut !

Merci beaucoup ! !! pour les réponses ! !!

Je dois l'avoir mal formulé : l'idée est la suivante :

Il y a une transaction de vente à 1.4545... le prix va contre la tendance - 1.4585... et ALORS - un ordre en attente devrait être placé à 1.4565.

mon code ne fonctionne pas correctement :

S'il vous plaît, aidez-moi ! !!

L'offre et la demande ne doivent pas être multipliées par le point. Il a tout de suite attiré mon attention.

Les conditions devraient être construites différemment :

if (Bid-OrderOpenPrice() > 40*Point)
{...}
if (OrderOpenPrice()-Ask > 40*Point)
{...}

Je ne comprends pas non plus quelle est la variable que vous avez SL ? Quelle est sa valeur ? Où est-il calculé ?

Et ceci

           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

Tu devrais le mettre en boucle. Une boucle avec recherche d'ordre devrait être commune pour les ordres d'achat et de vente.

Vous devez être vraiment mauvais en programmation. Je vous conseille de relire le manuel et de regarder les exemples qui y sont donnés pour écrire un conseiller expert simple, le calcul des ordres et les fonctions de négociation.


Vous faites également une erreur : RefreshRates() doit être placé avant que vous vouliez utiliser des variables prédéfinies ou des tableaux de séries temporelles, et non après...

 
MaxZ:

L'offre et la demande ne doivent pas être multipliées par le point. Il a immédiatement attiré mon attention...

Les conditions devraient être construites différemment :


Tu ne dois pas mettre des parenthèses ?

if ((Bid-OrderOpenPrice()) > 40*Point)
{...}
if ((Ask-OrderOpenPrice()) < 40*Point)
 
MaxZ:

L'offre et la demande ne doivent pas être multipliées par le point. Il a immédiatement attiré mon attention...

Les conditions devraient être construites différemment :

Je ne suis pas non plus sûr de la variable que vous avez SL ? Quelle est sa valeur ? Où est-il calculé ?

Et ceci

Tu dois le mettre dans une boucle...

Vous êtes vraiment mauvais en programmation... Je vous conseille de relire le tutoriel et de regarder les exemples d'écriture d'un conseiller expert simple, de calcul des ordres et de fonctions de négociation.

Il s'agit du Stop Loss normal = SL
 
FOReignEXchange:


Tu ne dois pas mettre des parenthèses ?

Pas nécessairement. Ça marchera sans les crochets ! :)

Cela dépend de comment vous l'aimez. L'écriture manuscrite ! :D

 
smartemiy:
Il s'agit d'un Stop Loss = SL régulier.
Comment est-il calculé ? Et pourquoi est-ce commun pour l'ACHAT et la VENTE ?

smartemiy:

il y a une transaction de vente à 1.4545... le prix va contre la tendance - 1.4585... et ALORS - un ordre en attente devrait être placé à 1.4565.

D'ailleurs, si elle est contre la tendance, les conditions doivent être négatives :

if (Bid-OrderOpenPrice() < -40*Point)
{...}
if (OrderOpenPrice()-Ask < -40*Point)
{...}

Généralement à partir des expressions

 ProfitBUY  = Bid-OrderOpenPrice();
ProfitSELL = OrderOpenPrice()-Ask;

Nous pouvons trouver le profit du trade correspondant en pips. Si le bénéfice est négatif, il s'agit déjà d'une perte. Ici nous vérifions si la perte est supérieure à 40 pips, nous devons placer un ordre en attente.

 
MaxZ:
Comment est-il calculé ? Et pourquoi est-ce commun pour l'ACHAT et la VENTE ?

Lestop loss n'est pas si important, maintenant...

le code, en théorie, fonctionnera-t-il avec vos ajustements ?

 
smartemiy:

Le stop loss n'est pas si important, maintenant...

Le code, en théorie, va-t-il fonctionner ? Avec vos corrections

Cela peut fonctionner, mais fonctionnera-t-il correctement ?

Encore une fois, à partir de votre problème :

Smartemiy:

"Une transaction de vente est effectuée à 1.4545... le prix va contre la tendance - 1.4585... et ALORS - un ordre en attente devrait être placé à 1.4565."

Un ordre de VENTE a été ouvert. OrderOpenPrice() retournera 1.4545.

Le prix va à l'encontre de la tendance. Demande = 1.4585. Condition :

if (OrderOpenPrice()-Ask <= -40*Point)

Cela fonctionnera (mettez un signe "<=").

Analysons le code suivant :

order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);

Un ordre BUYLIMITen attente est fixé au prix de 1,4545-20*Point = 1,4525. Il doit être à 1,4565.


Mais avant de faire ça, essayez de réécrire tout le code. Il y a beaucoup d'erreurs, et certains fragments donnent l'impression que vous ne comprenez pas ce que vous écrivez.

Raison: