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

 
Sur la paire EUR/USD.
 
waitra >> :

int NombreDePos_HISTOIRE

J'ai essayé, il ne compte que le nombre de positions actuelles ouvertes, il ne compte pas l'historique, il renvoie une valeur nulle lors de la fermeture d'un ordre, peut-être faut-il changer quelque chose d'autre ?

Ici, je l'ai fait. J'ai pris une autre fonction de I.Kim et l'ai modifiée un peu.

Ça marche comme sur des roulettes :

La fonction START peut être utilisée pour le contrôle.

Comment ("ордера на истории= ",NumberOfPos_HISTORY_2(NULL,-1,Magic));

Et voici la fonction elle-même :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз из  истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY_2 (string sy="", int op=-1, int mn=-1) {
     int      i, k=OrdersHistoryTotal(), kp=0;
  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 (OrderProfit()<0 || OrderProfit()>=0) kp++;           
            }  } } } }  }  return( kp);}


 

Bonjour à tous ! !!

//+------------------------------------------------------------------+
//|                                                   SimpleMA22.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//---- input parameters
extern int       MAFP=21;
extern int       MASP=55;
extern double    Lots=0.1;
extern int       StopLoss=60;
extern int       TakeProfit=30;
extern int       MagicNumber=123456;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
   
bool CheckOrders(int Type)
{
 bool Result= True;
 for(int i=0; i<OrdersTotal(); i++)
  if(OrderSelect( i, SELECT_BY_POS))
   if(OrderMagicNumber()== MagicNumber && OrderSymbol() == Symbol())
      if(OrderType()== Type)
        {
         if( Type==OP_BUY)
           if(!OrderClose(OrderTicket(),OrderLots(),Bid,0))
             Result= False;
         if( Type==OP_SELL)
           if(!OrderClose(OrderTicket(),OrderLots(),Ask,0))
             Result= False;
         } 
        else Result= False;
 return( Result); 
}
//+------------------------------------------------------------------+
//| 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( 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);
  }//+------------------------------------------------------------------+


Cerveaux à la vapeur, à la vapeur et éteints.....

Il est probablement plus facile de trouver un moyen de faire creuser une tranchée par les ivrognes ou d'organiser le ramassage des ordures par les clochards que d'aller sur ...........

Dans ce fil, quelque part au début, un problème similaire au mien a été soulevé. Lire, lire.... Je ne comprends toujours pas, et la conversation portait sur les drapeaux...

L'idée est simple. SimpleMA, mais c'est un peu modifié, mais ça n'a pas d'importance.

A qui doit-on ajouter le fi si un conseiller (à l'achat) achète, un ordre est déclenché par le TP et l'ordre suivant est mis à condition de vendre, c'est-à-dire de franchir les MAs pour vendre ?

Qu'il y ait ou non une condition supplémentaire.

 

La fonction https://www.mql5.com/ru/forum/107476/page21 peut peut-être vous aider.

Fonction isCloseLastPosByTake().
Cette fonction renvoie un drapeau pour fermer la dernière position par Take.

Flag up - True - TakeProfit a été déclenché.

Drapeau abaissé - Faux - le poste a été fermé pour une autre raison.


La fonction elle-même doit être placée à la toute fin du code. Ajouter à la condition de vente :

if( isCloseLastPosByTake( NULL, OP_BUY, MagicNumber) ==true) {//продаем



 
xmurik писал(а) >>
Sur la paire EUR/USD.
//+------------------------------------------------------------------+
//|                                                       скрипт.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int kolvo_barov = 1000;
   double start_price = iOpen(Symbol(),0, kolvo_barov);
   int handle;
   handle=FileOpen("my_data.csv", FILE_WRITE|FILE_CSV, '\t');
   if( handle>0) {
      while( kolvo_barov>1) {
         if (iHigh(Symbol(),0, kolvo_barov)> start_price + 0.01) {
            FileWrite( handle,"+100");
            start_price = start_price + 0.01;
         }      
         if (iHigh(Symbol(),0, kolvo_barov)< start_price + 0.01) {
            FileWrite( handle,"-100");
            start_price = start_price - 0.01;
         }      kolvo_barov--;
      }
      FileClose( handle);
   }
   return(0);
}
//+------------------------------------------------------------------+
Regardez ça. Seulement je ne l'ai pas vérifié. Il peut y avoir des erreurs.
 

Des gens bien. Je ne comprends pas (voir photo) pourquoi Momentum n'est pas Momentum :).


Momentum

Pouvez-vous expliquer pourquoi elle est supérieure à zéro ?
 
rid писал(а) >>

Voici ce que j'ai fait. J'ai pris une autre fonction de I. Kim et l'ai un peu modifiée.

Ça marche comme sur des roulettes :

La fonction START peut être mise en place pour le contrôle.


Et voici la fonction elle-même :

Oui, ça marche ! Merci beaucoup ! Merci ! >> Bonne chance à vous !

 
warlock писал(а) >>

Au secours ! !! l'expert est censé ouvrir des trades à l'ouverture d'une nouvelle bougie, mais en plus d'ouvrir au début de la bougie, il en ouvre des "à gauche" de façon chaotique...

De plus, après avoir assigné High et Low, il a cessé d'acheter... mais ne fait que vendre...

Et il était difficile de vérifier soigneusement OrderSend(). L'un échoue par erreur, l'autre échoue.

if ( AllowBUY) 
   tick=OrderSend(Symbol(),OP_SELLSTOP, Lot, price1,3,( price1- SL*Point)* loss,( price1- TP*Point)* profit,"scriptSELLstop",CLR_NONE, expiration);
if ( AllowSELL) 
   tick=OrderSend(Symbol(),OP_SELLSTOP, Lot, price2,3,( price2+ SL*Point)* loss,( price2- TP*Point)* profit,"scriptSELLstop",CLR_NONE, expiration);
 
warlock >> :

A l'aide ! !! l'expert est censé ouvrir des trades à l'ouverture d'une nouvelle bougie, mais en plus d'ouvrir au début de la bougie, il en ouvre aussi des "à gauche" de manière chaotique....

De plus, après avoir assigné le haut et le bas, j'ai arrêté d'acheter... seulement de vendre...

Merci... assis pendant une heure... Je ne comprenais pas ce qui se passait... Parfois, on a besoin de quelqu'un pour nous ouvrir les yeux sur les erreurs...

 
Bonjour à tous, quelqu'un peut-il aider à écrire un conseiller en indicateurs AC ?
Raison: