Question sur le conseiller multi-devises - page 3

 

Merci, komposter. J'ai commencé à le faire !

Mais voici une autre question ! Mon conseiller expert a des blocs d'ouverture de position et des barres de suivi séparés.

int start()
  {
// ЗАДАЕМ ПЕРЕМЕННЫЕ ДЛЯ ВСЕХ ПАР
 
 
 // ОТКРЫВАЕМ ПОЗИЦИИ ПО ВСЕМ ПАРАМ
 
//----------------------------------------------
// -------- ТРЕЙЛИНГ СТОПЫ -----------------------
if (UseTrailing_ == True)                                             {                  
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
//--------------------------------------------------
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==MagicGBPUSD)     
      {  Трейлинг по фунту }
//--------------------------------------------------
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==MagicEURUSD)     
      {  Трейлинг по евро }
//--------------------------------------------------------------------
                                                                       }
                                                                      }
                                                                     }
//----------------------------------------------------------------------
   } 
  return(0);
CEPENDANT, j'ai mis un morceau de code (par exemple pour la livre) dans le chalut -

.
double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Mais j'ai déjà utilisé ce bit lorsque j'ai ouvert une position sur le GBP. Puis-je maintenant utiliser à nouveau le même trailing stopper ? Ou bien, dois-je saisir à nouveau la même tranche arrière pour la livre, avec des noms de valeurs légèrement différents ?

 
rid:
CEPENDANT, je mets un morceau de code (par exemple pour la livre) dans le - de fin de ligne.
double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Mais j'ai déjà utilisé cette tranche auparavant lorsque j'ai ouvert une position sur la livre. Puis-je utiliser à nouveau la même pièce dans le chalut ? Ou dois-je saisir à nouveau la même pièce avec des noms légèrement différents pour ces valeurs dans le chalut pour la livre ?

Vous pouvez insérer "ce bit" au tout début de la fonction start() et utiliser des valeurs variables dans tous les blocs.
 

Merci beaucoup pour votre réponse ! komposter !

Une dernière question importante. (J'ai peur d'avoir l'air trop intrusif, mais...) -

Pour la troisième paire, j'appelle (pour diverses raisons) la bibliothèque de queue. Depuis le dossier librares, par exemple.

Comment être dans ce cas ? Est-il nécessaire de spécifier la même chose dans la bibliothèque pour ce couple ?

//RefreshRates();
 double bid = MarketInfo("USDCHF", MODE_BID);
 double ask = MarketInfo("USDCHF", MODE_ASK);
 double point =MarketInfo("USDCHF",MODE_POINT);

et changer le symbole et le magik en conséquence :

... .... .....
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY) {
          if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
            if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); 
 .... ... ...
 
rid:

Pour la troisième paire, j'appelle (pour diverses raisons) la bibliothèque de queue. À partir du dossier libraris, par exemple.
Comment être dans ce cas ? Dois-je définir de la même manière dans la bibliothèque ?

Cela dépend de la bibliothèque. S'il sait comment travailler avec des ordres de caractères non natifs, ce ne sera pas un problème. Si ce n'est pas le cas, ce sera mauvais ;)
 

C'est la bibliothèque de sortie à trois niveaux de Kim. Maintenant, je suis entré dans le code. Au lieu d'un symbole partout, je mets le nom de la paire et au lieu d'un magik, je mets le magik de ma paire.

//+------------------------------------------------------------------+
//|                                                  a-TLE_v.1.6.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  v.1.6  Три уровня переноса стопа.                               |
//| 23.11.2005 v.a1.6  Реализация в виде универсального модуля.      |
//|                                                                  |
//|   Для использования добавить строку в модуле start               |
//|   if (UseTrailing) TrailingPositions();                          |
//+------------------------------------------------------------------+
 
//------- Внешние параметры модуля - уровни переноса--------------------
... ... ... ...
 
//+------------------------------------------------------------------+
//| Сопровождение позиций                                            |
//+------------------------------------------------------------------+
void TrailingPositions()                                  {
  for (int i=0; i<OrdersTotal(); i++)                       {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))           {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        ThreeLevelSystemOfOutput();
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput()                      {
   int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);
  if ( бла-бла-бла)                                  {
    SimpleTrailingPositions();
                                                      }
                                                      }
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void SimpleTrailingPositions() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
... ... ...
   
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
... ... ...
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
    double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);  
 ... ... ...  
//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double pr=0;
 
  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    pr=(pBid-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    pr=(OrderOpenPrice()-pAsk)/pp;
  }
  return(MathRound(pr));
}
 
//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint() {
  double pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double sp=0;
 
  if (OrderType()==OP_BUY) {
    sp=(OrderStopLoss()-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    sp=(OrderOpenPrice()-OrderStopLoss())/pp;
  }
  if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
  return(MathRound(sp));
}
//+------------------------------------------------------------------+

Vous pouvez voir que c'est un peu flou avec tous les différents...

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);

et cela dans presque toutes les opérations !

Mais je n'ai changé que le symbole (j'ai spécifié la paire) et le magicien au tout début ! J'ai démarré le conseiller expert en ligne dans l'intervalle de temps de 1 minute. J'ai attendu le profit et arrêté le mouvement du prix sur cette paire. Tout semble fonctionner correctement. Je suis en accord avec l'algorithme de cette bibliothèque.

Mais je n'ai pas encore fait de bénéfices sur deux autres paires (avec mes propres chaluts).

Je le regarderai demain en ligne.

 
rid:

C'est la bibliothèque de sortie à trois niveaux de Kim. Maintenant, je suis entré dans le code. Au lieu d'un symbole partout, je mets le nom de la paire et au lieu d'un magik, je mets le magik de ma paire.

...

Vous pouvez voir que c'est un peu flou avec tous les différents...

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
La bibliothèque est écrite de manière compétente - il n'y a pas de lien avec l'outil graphique.
Il peut donc être utilisé sans modification.
 

Merci encore, komposter, pour vos réponses !

Maintenant, j'ai attendu en ligne les bénéfices sur les trois paires de mon conseiller expert. Il semble que chaque couple travaille en fonction de son mode de chalutage ! Y compris la paire avec l'appel de la bibliothèque !

 
komposter:
rid:

C'est la bibliothèque de sortie à trois niveaux de Kim. Maintenant, je suis entré dans le code. Au lieu d'un symbole partout, je mets le nom de la paire et au lieu d'un magik, je mets le magik de ma paire.

...

Vous pouvez voir que c'est un peu flou avec tous les différents...

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
La bibliothèque est écrite de manière compétente - il n'y a pas de lien avec l'outil graphique.
Il peut donc être utilisé sans modification.

Je vais ajouter ma propre version... code de coupe :


extern int    MagicNum = 400400, Stop = 33;
extern double Lot1 = 0.3;
int LotStop [8] = {28,33,43,33,33,33,33,33}; //можно юзать просто Stop
 
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{ 
 int i, SymPermitted = 3;
 string Symbols[8] = {"EURUSD","GBPUSD","USDJPY","EURJPY","USDCHF","Reserved","Reserved","Reserved"};
 
  // Ma defence
  if (Bars<100)
    return(0);  
  
  for (i=0; i < SymPermitted; i++)
  {
    // Compile/reload/crash config defence
    if      (Symbols[i] == "EURUSD") { Stop = 28; Lot1 = 0.6; }
    else if (Symbols[i] == "GBPUSD") { Stop = 33; Lot1 = 0.2; }
    else if (Symbols[i] == "USDJPY") { Stop = 43; Lot1 = 0.6; }
    Sleep (1000); // Просто так
    Checking (Symbols[i], i);
  }
  return (0);
}
 
void Checking (string Sym, int LotStopIndex)
{
 int Total, LotStop = LotStop[LotStopIndex], i, j, Tic = 0;
 double VPoint, VAsk, VBid;
 
   Total = OrdersTotal();
 
   // Check opened
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
     {  
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
         return (0);
     }
   }
   
   VPoint = MarketInfo(Sym, MODE_POINT);
   //... кучка кода расчётов
   Total = HistoryTotal();
   
   if (Total == 0)
   { // Reset to default
     LotSize = Lot1;
     LotStop[LotStopIndex] = Stop;
   }
   
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (Total-i-1, SELECT_BY_POS, MODE_HISTORY) == true)
     { 
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
       { // Was loss (Alpari иногда выбивает положительные лосы и отрицательные профиты... мистика
         if (((OrderProfit ()) < 0) || (OrderClosePrice() == OrderStopLoss()))
         { ..код
         }
           
         else
         { // Reset to default
           LotSize = Lot1;
           LotStop[LotStopIndex] = Stop;
         }
         break;
       }
     }
 
     else
     {
       Print("Ошибка <", GetLastError(), "> при выборе хистори - ордера");
       return (1);
     }
  }
 
  if(AccountFreeMarginCheck(Sym, OP_BUY, LotSize) <= 0) 
  {  return (0); }
 
  
  VAsk = MarketInfo (Sym, MODE_ASK);
  VBid = MarketInfo (Sym, MODE_BID);
  // bay|sell...
  
  if (условие 1)
    Tic = OrderSend (Sym, OP_BUY, LotSize, VAsk, 3, VAsk-LotStop[LotStopIndex]*VPoint, VAsk+LotStop*VPoint, "CMATest5m", MagicNum, 0, Lime);
    
  else if (условие 2)
    Tic = OrderSend (Sym, OP_SELL, LotSize, VBid, 3, VBid+LotStop[LotStopIndex]*VPoint, VBid-LotStop*VPoint, "CMATest5m", MagicNum, 0, Red);
  
  if (Tic <= 0)
  {
    Print("Ошибка <", GetLastError(), "> при запросе ордера");
    Sleep (60000); // Ждём минуту... рынок никуда не убежит :-)...
  }
}
 

VassaV, dites-nous en un peu plus sur ce que vous avez posté ici et comment l'utiliser.

Que signifie l'expression "code coupé" ?

Pourquoi il n'y a pas de commentaire à la troisième ligne. //peut-on utiliser... ?

 
rid:

VassaV, dites-nous en un peu plus sur ce que vous avez posté ici et comment l'utiliser.

Que signifie l'expression "code coupé" ?

Pourquoi il n'y a pas de commentaire à la troisième ligne. //peut-on utiliser... ?


Cut up signifie couper de manière à ce qu'il ne reste que la base. C'est à vous de décider comment l'utiliser, voici juste un exemple.

En conséquence :

//... un tas de code de calcul - ici son propre code de traitement des signaux/indicateurs.

// ...code - ici nous avons notre propre code pour le traitement des pertes

condition 1 - nous avons ici notre propre code de conditions d'achat/vente

// pouvez-vous utiliser... ? - c'est un commentaire, il est juste affiché de cette façon.

Cela signifie que vous pouvez utiliser des tableaux pour stocker les paramètres de chaque devise ou vous pouvez stocker les paramètres dans le code

(section // Compilation/rechargement/crash config)