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

 
tara:
Pourquoi pas deux ?
Ensuite, les noms sont classés par ordre alphabétique.
 
     // Проверяем все открытые ордера---------------------------------------------------------------------------

    for(n=0,i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC+1 || OrderMagicNumber()>MAGIC+3) continue;
      no=OrderMagicNumber()-MAGIC;
      
      if(no==1)
      {
         n++;
         if(OrderType()==OP_SELL) { if(OrderOpenTime()>=ltts && BSo1==OP_SELL) s1=true; 
         if(MathAbs((OrderOpenPrice()-NormalizeDouble(Bid,Digits))/Point)<Add){OS1=1;} // Запрет на открытие селл

            } else
         if(OrderType()==OP_BUY) { if(OrderOpenTime()>=lttb && BSo==OP_BUY) b1=true;
         if(MathAbs(OrderOpenPrice()-NormalizeDouble(Ask,Digits))/Point<Add){OB1=1;} // Запрет на открытие бай
         }     
      }
   }
Bon après-midi.
La tâche consiste à ouvrir un ordre à une certaine distance "Add" d'un ordre déjà ouvert.
Des ordres d'achat et de vente distincts sont contrôlés.
J'ai écrit ce code. Cela semble fonctionner, mais parfois le prix couvre une distance plus longue que le "Add" mais l'ordre n'est pas ouvert.
J'ai essayé les imprimantes mais la condition "Ajouter" ne fonctionne pas correctement et je ne sais pas ce qui ne va pas.
Peut-être que quelqu'un me dira ce qu'il faut faire ?
 

Chers Messieurs, je suis perplexe quant à la solution d'un problème lié aux requêtes.

Situation : L'Expert Advisor ouvre des ordres depuis le marché avec des hard stops et des takeovers en pips, travaille sur une barre fermée, M15. Un signal d'ouverture de l'ordre est reçu et le conseiller expert tente d'ouvrir l'ordre plusieurs fois, mais il échoue. Sur la barre suivante, le signal se répète et le conseiller expert ouvre la transaction, mais le taux a quitté le point où le premier signal a été donné. Il s'avère que le stop and take sera fixé à partir du taux auquel la transaction a été ouverte, plutôt qu'à partir du taux auquel le premier signal à ouvrir. J'ai écrit une construction telle que lors de la définition d'un stop and take, le conseiller expert prendrait le prix auquel le premier signal a été reçu.

  if(sg==1 && TimeCurrent()-buy_time>=1800) {buy_price=Ask;buy_time=TimeCurrent();}//
  if(sg==-1 && TimeCurrent()-sell_time>=1800) {sell_price=Bid;sell_time=TimeCurrent();}//
где,
sg==1 сигнал на покупку
sg==-1 сигнал на продажу
buy_time - переменная в которую запоминаем время поступления сигнала на покупку
sell_time - переменная в которую запоминаем время поступления сигнала на продажу

при выставлении ордера стоп и тейк прибавляем/вычитаем не от текущей цены а от buy_price и sell_price

Je veux expliquer pourquoi je veux utiliser le premier signal : les tailles des arrêts et des prises ont été sélectionnées dans le testeur et sont en quelque sorte optimales, si nous définissons les arrêts/prises à partir du deuxième signal, ils ne seront pas optimaux car le taux d'ouverture réel diffère du taux du premier signal.

 
evillive:

Les transactions dans les ordres sont au nombre de 1, c'est-à-dire qu'on n'atteint jamais la plus ancienne. Deuxièmement, il parcourt les ordres du plus récent au plus ancien, et les plus anciens peuvent être fermés à l'aide d'un stop ou d'une prise avant que le chalutier ne les atteigne. En général, ce qui ne fonctionne pas, avez-vous des journaux d'erreurs ?


TS ne fonctionne pas du tout, plusieurs fois j'ai remarqué que "comme prévu" il ne ferme pas les positions du tout.Pas de journaux d'erreurs, mais comment les obtenir ?

Et en ce qui concerne les ordres de fermeture, pourriez-vous écrire plus de détails, car l'EA est multi-devises, mais avec une limite d'une transaction sur une devise à la fois.

 
Stells:
Bon après-midi.
La tâche consiste à ouvrir un ordre à une certaine distance "Add" d'un ordre déjà ouvert.
Des ordres d'achat et de vente distincts sont contrôlés.
J'ai écrit ce code. Cela semble fonctionner, mais parfois le prix couvre une distance plus longue que le "Add" mais l'ordre n'est pas ouvert.
J'ai essayé les imprimantes mais la condition "Ajouter" ne fonctionne pas correctement et je ne sais pas ce qui ne va pas.
Peut-être que quelqu'un me dira ce qu'il faut faire ?


Les caractéristiques d'Igor Kim, de manière simple et pratique.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |7
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Sancho77:

Chers Messieurs, je suis perplexe quant à la solution d'un problème lié aux requêtes.

Situation : L'Expert Advisor ouvre des ordres depuis le marché avec des hard stops et des takeovers en pips, il travaille sur une barre fermée, M15. Un signal d'ouverture de l'ordre est reçu et le conseiller expert essaie d'ouvrir l'ordre plusieurs fois, mais il échoue. Sur la barre suivante, le signal se répète et le conseiller expert ouvre la transaction, mais le taux a quitté le point où le premier signal a été donné. Il s'avère que le stop and take sera fixé à partir du taux auquel la transaction a été ouverte, plutôt qu'à partir du taux auquel le premier signal à ouvrir. J'ai écrit une construction telle que lors de la définition d'un stop and take, le conseiller expert prendrait le prix auquel le premier signal a été reçu.

Je veux expliquer pourquoi je veux utiliser le premier signal : les tailles de stop et de prise ont été sélectionnées dans le testeur et sont en quelque sorte optimales, si vous définissez des stops/arrêts à partir du deuxième signal, il s'avérera qu'ils ne sont pas optimaux, parce que le taux d'ouverture réel des transactions est différent du taux au premier signal.

Il s'avère que l'optimalité n' est déterminée que par les niveaux de tp et de sl, tandis que le prix de la transaction peut être quelconque ? Cela ne semble pas logique.
 
alsu:
Il s'avère que l'optimalité n' est déterminée que par les niveaux de tp et de sl, alors que le prix de la transaction peut être quelconque ? Ça ne semble pas logique.

L'optimalité n'est pas seulement déterminée par un stop and take, elle est surtout déterminée par les paramètres du signal d'ouverture de la transaction, je n'ai pas donné ces signaux pour ne pas surcharger ma question, les paramètres du signal ne concernent en effet pas le problème en question. Le prix de la transaction peut être quelconque, si le signal d'ouverture de la transaction est enregistré.

Je vous serais reconnaissant de bien vouloir donner votre avis sur l'essence de ma question, à savoir si le code de calcul des niveaux à partir desquels un stop and take sera calculé est écrit correctement ?

 
Sancho77:

Je n'ai pas le code sous la main, mais j'ai fait quelque chose de similaire pour moi-même, mais pas comme ça : je me souvenais de l'heure de la barre à laquelle il y avait un signal, et quand un ordre était placé en utilisant ce signal, je remettais l'heure du signal à zéro, et ainsi de suite :

datetime buy_time,sell_time;
int init(){
   buy_time = 0;
   sell_time = 0;
}
int start(){
   if(buy_time==0 && Open[1]>Close[2]) buy_time = TimeCurrent();
   .......
   if(buy_time!=0){
      OrderSend(.........);
      buy_time = 0;
   }
return(0);
}
Si la question porte sur la lutte contre les requêtes uniquement, consultez le fil de discussion d'Igor Kim. Presque toutes les fonctions permettant de passer des ordres ont un paramètre permettant de déterminer le nombre de tentatives d'exécution de l'ordre.
 
Sancho77:

L'optimalité n'est pas seulement déterminée par un stop and take, elle est surtout déterminée par les paramètres du signal d'ouverture d'un deal, je n'ai pas donné ces signaux pour ne pas surcharger ma question, les paramètres du signal en effet ne concernent pas le problème en question. Le prix de la transaction peut être quelconque, si le signal d'ouverture de la transaction est enregistré.

Je vous serai reconnaissant de me donner votre avis sur l'essence de ma question, à savoir si le code pour le calcul des niveaux à partir desquels le stop et le take seront calculés correctement est écrit ?

Oui, c'est écrit correctement mais imaginez la situation : le prix "réel" de la transaction s'est avéré, par exemple, supérieur au TP mémorisé - que ferez-vous alors ? (et cette situation est tout à fait réelle - les requotes sont fréquentes sur le marché rapide, lorsque le prix saute).
 
alsu:
L'écriture est correcte mais imaginez la situation : le prix "réel" de l'opération s'est avéré être, par exemple, supérieur au TP mémorisé - que ferez-vous alors ? (Et cette situation est tout à fait réelle - les requotes sont juste fréquentes sur le marché rapide, lorsque le prix saute)
.

Merci pour votre opinion.

Si le prix s'avère être supérieur au TP mémorisé, la transaction s'ouvrira avec le niveau de prise minimum, ce traitement est inhérent à l'EA.

PS Au fait, je vais devoir essayer de mettre une interdiction d'ouverture de position si le nouveau prix s'éloigne du prix mémorisé à plus d'une certaine distance, merci pour la réflexion, j'aimerais pouvoir le vérifier dans le testeur, seulement dans le commerce.

Raison: