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

 

Bonjour !

J'ai une tâche, qui semble facile à première vue, mais qui ne fonctionne pas. Il s'agit d'un tableau dans lequel les valeurs se trouvent toujours sur une ligne (dans certains cas, les valeurs peuvent aller dans l'ordre croissant, dans d'autres cas - dans l'ordre décroissant). Il y a un peu de niveau (rouge sur la photo). Vous devez trouver les deux valeurs du tableau qui sont les plus proches du niveau de la ligne rouge. Dans la figure a), ce seront des valeurs de tableau avec les indices 0 et 1. Dans la figure b), ce seront des valeurs de tableau avec les indices 2 et 1. Dans les figures c) et f), ce seront des valeurs de tableau avec les indices 0 et 0. Dans les figures d) et e), ce seront des valeurs de tableau avec les indices 2 et 2.

Veuillez me dire comment résoudre ce problème. Merci d'avance.

 
Roman.:

Alors ne vous inquiétez pas - déplacez simplement le code de l'indicateur vers le Conseiller Expert tel qu'il est pour remplir les critères de trading et c'est tout - ensuite dans le tableau en utilisant ces conditions de trading transférées de cet indicateur vous ouvrez des positions à travers le Conseiller Expert et c'est tout...
Merci, j'y travaille :)
 
skyjet:
Merci, je m'en occupe :)

Vous êtes le bienvenu... Tout le monde est passé par là. :-)
 
drknn:

Aujourd'hui, c'est samedi - jour de congé. Vous démarrez l'EA, l'initialisation se produit, mais comme il s'agit d'un jour sans et qu'il n'y a pas de tick, la fonction de démarrage n'est pas lancée (c'est-à-dire que Trade() n'est pas appelé.). Pour vérifier s'il fonctionne correctement, vous devez coller l'appel de cette fonction dans le bloc d'initialisation, ou le tester dans le testeur.

Après avoir substitué cette fonction dans Init() et ajouté le code de vérification Print(DayOfWeek()), il s'est avéré que l'heure était prise sur le serveur, et que l'heure du serveur était le vendredi...

Remplacé

if(DayOfWeek()==0 || DayOfWeek()==6)

à

  if(TimeDayOfWeek(TimeLocal())==0 || TimeDayOfWeek(TimeLocal())==6)

et ça a marché comme prévu.

Merci.

 

Bonjour, camarades !

Vous avez été confronté à un problème inattendu.

Avant-hier, le testeur fonctionnait comme il le devait. Depuis hier soir, toute version de la stratégie dans le testeur ouvre une transaction et après une seconde, ou quelques minutes/heures d'historique, le testeur cesse de fonctionner. Pas d'erreurs, rien.

Quelqu'un a un problème avec ça ? Veuillez me conseiller

 

Bonjour.

Veuillez m'aider à trouver l'erreur.

Vous trouverez ci-dessous la section problématique dans son intégralité, extraite de l'évaluation environnementale.

extern int      MAGIC= 1; 

int start()
  {
//----
  int tt = 0;
  double SchBuyLots     = SchBuyLots_b(MAGIC);
  double SchSellLots    = SchSellLots_b(MAGIC);
  double SchBuyLots100  = SchBuyLots100_b();
  double SchSellLots100 = SchSellLots100_b();
  double SchBuyLimitLots    = SchBuyLimitLots_b(MAGIC);
  double SchSellLimitLots   = SchSellLimitLots_b(MAGIC);
  double SchBuyStopLots100  = SchBuyStopLots100_b();
  double SchSellStopLots100 = SchSellStopLots100_b();

  double dy=0;
  double dx=SchBuyLots+SchBuyLots100-SchSellLots-SchSellLots100;
  if (dx!=0) dy=MathAbs(dx);

  double zx=SchBuyLimitLots-SchSellLimitLots;

  if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;
 
  Alert (dy+zx,"---",SchSellStopLots100,"---",tt);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
// ----------------- SchBuyLots() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика
//----------------------------------------------------------------
double SchBuyLots_b(int MAGIC) {
  double SchBuyLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){ 
      if(OrderType()==OP_BUY) {
        SchBuyLots=SchBuyLots+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLots() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика
//-----------------------------------------------------------------
double SchSellLots_b(int MAGIC) {
  double SchSellLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
      if(OrderType()==OP_SELL) {
        SchSellLots=SchSellLots+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLots);
}
// -------------------------------------------------------------------------------

// ----------------- SchBuyLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyLots100_b() {
  double SchBuyLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_BUY) {
        SchBuyLots100=SchBuyLots100+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellLots100_b() {
  double SchSellLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_SELL) {
        SchSellLots100=SchSellLots100+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLots100);
}
// ----------------------------------------------------------------------------
// ----------------- SchBuyLimitLots() ------------------------------------------
//  Функция возвращает суммарный лот BuyLimit-ордеров для Магика
//------------------------------------------------------------------------------
double SchBuyLimitLots_b(int MAGIC) {
  double SchBuyLimitLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){ 
      if(OrderType()==OP_BUYLIMIT) {
        SchBuyLimitLots=SchBuyLimitLots+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLimitLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLimitLots() ----------------------------------------
//  Функция возвращает суммарный лот SellLimit-ордеров для Магика
//-----------------------------------------------------------------------------
double SchSellLimitLots_b(int MAGIC) {
  double SchSellLimitLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
      if(OrderType()==OP_SELLLIMIT) {
        SchSellLimitLots=SchSellLimitLots+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLimitLots);
}
// -------------------------------------------------------------------------------
// ----------------- SchBuyStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот BuyStop-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyStopLots100_b() {
  double SchBuyStopLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_BUYSTOP) {
        SchBuyStopLots100=SchBuyStopLots100+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyStopLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот SellStop-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellStopLots100_b() {
  double SchSellStopLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_SELLSTOP) {
        SchSellStopLots100=SchSellStopLots100+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellStopLots100);
}
// --------------------------------------------------------------------------------

Veuillez prêter attention à la ligne (presque au tout début) :

 if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;

Pour une raison quelconque, lorsque les valeurs dy+zx et SchSellStopLots100 sont égales séparément (j'ai vérifié avec allerts) dans cette expression, elles ne sont plus égales entre elles, et la variable tt prend la valeur 1 au lieu de 2.

Je vous demande de m'aider à trouver la faille.

Merci d'avance.

 
Les conditions commerciales du serveur ont changé au cours du week-end... Vous devez effectuer un test sur un terminal séparé non connecté à un courtier/réseau, en utilisant un utilitaire spécial pour définir le bon écart. Il est préférable de rechercher des articles sur les tests d'EA et sur la manière de les réaliser correctement.
 
nemo811:

(vérifié avec allerts)

Il est préférable de vérifier via ND ou la différence modulo inférieure à un certain delta.
 
splxgf:
Il vaut mieux vérifier via ND ou les différences modulo moins qu'un certain delta.

Pour une raison quelconque, l'addition de dy et zx donne un nombre 0,3 (dans mon test particulier de la situation actuelle du marché) alors que la comparaison avec ce nombre ne l'égale pas. C'est-à-dire que j'additionne dy+zx et j'obtiens 0,3. Je compare dy+zx avec 0,3 - ils ne sont pas égaux.

En comparant dy et zx avec les nombres qu'ils renvoient - les égalités fonctionnent comme elles le devraient.

Une énigme.

Aidez-moi, s'il vous plaît.

 
ramirez17:

Bonjour, camarades !

Confronté à un problème inattendu.

Avant-hier, le testeur fonctionnait comme il le devait. Depuis hier soir, toute version de la stratégie dans le testeur ouvre une transaction et après une seconde, ou quelques minutes/heures d'historique, le testeur cesse de fonctionner. Aucune erreur, rien.

Quelqu'un a un problème avec ça ? Veuillez me conseiller

Le testeur est équipé d'un chargeur. Tout y est écrit. Il n'y a pas de télépathes ici pour lire à distance les journaux de bord de vos testeurs.
Raison: