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

 
Beowulf:
Pouvez-vous me suggérer quelques ouvrages pour me permettre de démarrer et de créer ma propre EA ! Ou est-ce quelque chose que les simples mortels ne peuvent pas faire ? )))
Nous (simples mortels) ne pouvons pas le faire ! ;)))
 
lottamer:


1) il est compréhensible

2) je viens de vérifier... chez Alpari, vous ne pouvez pas définir de stop et de take à l'ouverture, mais seulement par modification ultérieure... les coûts du non-dealing-desk.

3) il existe une stratégie.


Alors c'est aussi simple que vous l'avez suggéré. Après la modification, vous définissez une case à cocher et vérifiez son état avant la modification, s'il y a une commande. S'il y en a plusieurs, vous devez comptabiliser vous-même les commandes. La façon de procéder se trouve dans la section des articles.
 
TarasBY:
Nous (simples mortels) ne comprenons pas ! ;)))



Je vais lire un petit bout de mon aspirateur )))).
 

Pouvez-vous nous dire s'il y a un glissement pour les valeurs d'arrêt et d'enlèvement lorsque les ordres sont réouverts avec une reconduction ? Et comment l'arrêt sera-t-il fixé si la différence entre le prix ouvert et l'arrêt après la reconduction est inférieure à l'arrêt nivelé ?

Ma tâche est la suivante. Si j'ai un ordre ouvert sur le marché, je dois vérifier s'il a été ouvert avec un roulement et si c'est le cas, je dois obtenir le ticket de l'ordre précédent, qui a été fermé. Peut-être que quelqu'un pourra me dire quel est l'algorithme de recherche ? Je fais actuellement ce qui suit :

1. Je sélectionne le premier ordre ouvert.
2. Si elle a été ouverte de 23:40 à 00:20, alors je continue à vérifier cet ordre plus avant (la fenêtre de 40 minutes est prise au cas où, bien qu'en théorie vous pourriez prendre de 23:50 à 23:59)
3. Je me souviens du ticket, du stop et du prix de prise
4. Je vérifie tous les ordres fermés dans l'historique, dont les commentaires contiennent le mot swap et dont les paires de devises correspondent
5. Je compare les données sur les arrêts et les reprises, si elles correspondent, alors voici la paire d'ordres requise, sinon, je retourne à l'étape 1.

 

La réponse a été trouvée (personnellement), mais je laisse le post pour l'histoire ! :))))

----------------------------------

mais voici la chose intéressante à ce sujet...

J'ai un script (je l'ai eu en ligne). Il modifie un ordre ouvert.

Mon idée était de le prendre dans son ensemble, et de l'insérer dans mon conseiller expert comme une fonction définie par l'utilisateur, et de l'appeler chaque fois que nécessaire.

Le problème est que le compilateur donne l'erreur "'MB_OK' - variable non définie G:\Program_Files_2\MT4-demo\experts\33.mq4 (153, 37)" - 3ème ligne à partir de la fin

Mais si vous compilez le script lui-même, tout est clair !

J'ai compris ce qu'est MV_OC... mais je ne comprends pas pourquoi il fonctionne dans le script, mais se plaint dans l'Expert Advisor ?

//+------------------------------------------------------------------+
//|                                               Изменить стопы.mq4 |
//|                                                          Мефодий |
//|                                                    ppc-2@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Мефодий"
#property link      "ppc-2@mail.ru"
#include <WinUser32.mqh>

extern  int  StopLoss = 500; 
extern  int  TakeProfit = 500;

// #property show_confirm
// #property show_inputs

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

int start()
  {
        bool   result;
        double stop_loss,take_profit,point,bid,ask, lotsize;
        int    cmd, total, error, spread;
        string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        //if(ret==IDOK) return(0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Il s'avère que la ligne #include <WinUser32.mqh> doit être présente.

et ce fichier est dans include

 

Laissez-moi me vanter...

vous n'avez pas besoin de drapeaux lors de la modification.

il suffit sous condition if (cross-means par exemple)... de prendre référence pour utiliser la fonction BUY et MODIFY entre parenthèses {}

et de cette façon, la condition se propagera aux deux actions :))

comme ceci

{My_buy () ;

Ma_modification () ; }

:))))))))))))))))))))))))

 

lottamer:

comme ceci

{My_buy () ;

Ma_modification () ; }

:))))))))))))))))))))))))

Une interprétation aussi lâche du code du programme nécessite une clarification :

    if (условие == true)
    {
        if (Tvoi_buy() == true)  // как вариант
        {Tvoi_Modify();}
    }
:)))
 
TarasBY:

Une interprétation aussi lâche du code du programme nécessite une clarification :

:)))


Pourquoi ?

et Mon_achat (une variable non booléenne) peut-il être vérifié par VRAI-FAUX ?

La modification va pour sûr - l'ordre est ouvert - nous devons fixer les stop-stocks...

 
lottamer:

la modification est en cours pour sûr - l'ordre est ouvert - vous devez mettre les stop-steaks...

Alors pourquoi l'avoir mis entre parenthèses { } si (moyennes croisées par exemple) ?