[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 286

 

Bonjour. Pouvez-vous me dire s'il existe un EA qui marquerait les points d'entrée et de sortie sur le graphique, comme dans le testeur de stratégie?

 

Et manuellement - qu'y a-t-il de mal à ça ? Tirez les transactions de l'historique du compte avec la souris vers le graphique et elles y seront indiquées !

Ou utilisez le script - http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=32

 
TheXpert >> :

ShellExecute, commande "open", par ex.


Merci.
 
rid >> :

Il doit être placé à l'extérieur. Pas à l'intérieur de n'importe quelle fonction - mais comme une fonction séparée et indépendante.

Tu peux faire comme ça :


Je ne suis pas sûr que l'EA fonctionnera dans ces conditions. Parce que la toute première position ne pourra pas s'ouvrir...

La fonction isCloseLastPosByTake() doit être supprimée d'une condition d'achat ou de vente.

Alors ça marche.

le code du conseiller avec des corrections selon la recommandation de rid seulement le début

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
   // открытие позиции Buy покупка
    if( MAF_1 < MAS_1 && MAF_0 > MAS_0)                         {
    if( isCloseLastPosByTake( NULL, OP_SELL, MagicNumber) ==true) {
     if( CheckOrders(OP_SELL))                                      {
       if( StopLoss <= StopLevel+ Spread)
         double SL = 0;        else         SL = Ask - StopLoss*Point;
       if( TakeProfit <= StopLevel- Spread)
         double TP = 0;        else         TP = Ask + TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
                }
               }
              }
//-------------------Конец покупки -----------------------
    
  //  ----- Открытие позиции Sell продажа------------  
    if( MAF_1 > MAS_1 && MAF_0 < MAS_0)                         {
    if( CheckOrders(OP_BUY))                                     {
      if( StopLoss <= StopLevel+ Spread)
         SL = 0;        else         SL = Bid + StopLoss*Point;
       if( TakeProfit <= StopLevel- Spread)
         TP = 0;        else         TP = Bid - TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
                 }
                }
               }
      //---конец блока продажи ------------------------------
     
//----
   return(0);
  }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+

//ЖЖЖЖЖЖЖ Другие вызываемые пользовательские функции ЖЖЖЖЖЖ
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия           |
//|  последней позиции по тейку.                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) {
              if ( t<OrderCloseTime()) {
                t=OrderCloseTime();
                j= i;
              }} }}}}}

  if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo( sy, MODE_DIGITS);
    if ( dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if ( ocp== otp) return( True);
  }
  return( False);
}
 

J'ai eu une erreur quand je l'ai compilé.

2;73;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;103:3;'}' - unbalanced parentheses

cet endroit est marqué * aider les bonnes personnes.....

   return(0);
 * }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
 
igrok2008 писал(а) >>

J'ai eu une erreur quand je l'ai compilé.

cet endroit est marqué * aider les bonnes personnes.....

Le nombre d'accolades est différent dans la fonction de départ.

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
   // открытие позиции Buy покупка
    if( MAF_1 < MAS_1 && MAF_0 > MAS_0)                         {
        if( isCloseLastPosByTake( NULL, OP_SELL, MagicNumber) ==true) {
            if( CheckOrders(OP_SELL))                                      {
                if( StopLoss <= StopLevel+ Spread)   double SL = 0;        else         SL = Ask - StopLoss*Point;
                if( TakeProfit <= StopLevel- Spread) double TP = 0;        else         TP = Ask + TakeProfit*Point;
                if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
                    Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
            }
        }
    }
    //-------------------Конец покупки -----------------------
    
    //  ----- Открытие позиции Sell продажа------------  
    if( MAF_1 > MAS_1 && MAF_0 < MAS_0)                         {
        if( isCloseLastPosByTake( NULL, OP_BUY, MagicNumber) ==true) {
            if( CheckOrders(OP_BUY))                                     {
               if( StopLoss <= StopLevel+ Spread)             SL = 0;        else         SL = Bid + StopLoss*Point;
               if( TakeProfit <= StopLevel- Spread)           TP = 0;        else         TP = Bid - TakeProfit*Point;
               if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
                   Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
            }
        }
    }
    //---конец блока продажи ------------------------------
    
    return(0);
}//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
Quelque chose comme ça a dû arriver. Je ne suis pas entré dans la logique
 
igrok2008 >> :

voici le code de l'Expert Advisor avec des corrections sur la recommandation de rid


Retirez la parenthèse supplémentaire de la Salesbox. Je vous ai dit que le nombre de parenthèses ouvrantes doit être égal au nombre de parenthèses fermantes. Et vous avez deux parenthèses ouvertes et trois fermées !

Et bien sûr, il y aura une erreur de compilation.

 
rid >> :

Retirez la parenthèse supplémentaire de la Salesbox. Je vous ai dit que le nombre de parenthèses ouvrantes doit être égal au nombre de parenthèses fermantes. Mais vous avez deux parenthèses ouvertes et trois fermées !

Et bien sûr, il y aura une erreur de compilation.

Et les parenthèses ouvrantes sont ce que ????


aaaaaaaaahhhh, je l'ai, c'est {.........-!!!!!!!!!!!!!!} :-)))))))

Je vais tester......... Ne jugez pas, je vais essayer de poser des questions.

 
igrok2008 писал(а) >>

Et les crochets ouvrants sont ce que ????

aaaaaaaaaaaaaaand c'est {.........- !!!!!!!!!!!!!! :-)))))))

Je vais faire des tests.......... Ne m'en voulez pas, je poserai des questions.

Je pensais avoir fait une révision.

 

Une telle solution ne fonctionnera pas. Il ne sera pas en mesure d'ouvrir la toute première transaction. Parce que la condition pour ouvrir la toute première transaction dans votre variante est de fermer toute transaction précédente à la prise ou au stop !

C'est-à-dire un cercle vicieux.