[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 402

 
Bonjour, comment utiliser le metaeditor ?
 
crespo1985:
Bonjour, comment utiliser le métaéditeur ?


Eh bien, bonjour ! Tout ce que vous voulez, utilisez-le ! Ce n'est pas l'endroit pour poser ce genre de questions... C'est un forum de programmeurs...

Zhunko:

RefreshRates() met à jour l'historique dans le thread de l'Expert Advisor. MarketInfo() prend les données du serveur. Il n'a pas besoin d'être mis à jour. C'est un freinage inutile.

S'il doit être mis à jour, un simple appel de RefreshRates() ne peut rien faire. Nous devons contrôler et gérer tous les événements historiques d'une manière ou d'une autre.

Oui. Je comprends que RefreshRates() rafraîchit les données du marché (leur historique jusqu'à l'heure actuelle) et qu'ensuite la variable d'environnement du marché utilise la dernière valeur reçue. D'après ce que je comprends, c'est la seule variante logique. Par conséquent, cette fonction s'écrit plus facilement et plus rapidement et, logiquement, elle est plus pratique et plus fiable, n'est-ce pas ?

double fGet_TradePrice(int fi_price,    // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
   double ld_price = 0.0;
   
   switch (fi_price)
   {
         case 0:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);
         
         case 1:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Ask;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_ASK);
   }
}
 
hoz:

Oui. Je comprends que RefreshRates() met à jour les données du marché (son historique jusqu'à l'heure actuelle), puis la variable d'environnement du marché utilise la dernière valeur reçue. D'après ce que je comprends, c'est la seule variante logique. Par conséquent, cette fonction serait écrite plus facilement et plus rapidement et de manière plus logique, plus pratique et plus fiable, n'est-ce pas ?

Je ferais comme ça :

double TradePrice(int    nPriceId, // Цена: 0 - Bid; 1 - Ask
                  string sSymbol)  // валютная пара
 {
  switch (nPriceId)
   {
    case 0: return(MarketInfo(sSymbol, MODE_BID));
    case 1: return(MarketInfo(sSymbol, MODE_ASK));
    default: Print("Ошибка и прочее...");
   }
  return(0);
 }

Une fonction séparée doit être écrite pour mettre à jour l'historique.

 

2 heures à essayer d'écrire une pièce d'essai, pour tester davantage différentes conditions.

Ça ne marche pas !

Veuillez me donner l'erreur.

int mm;


if (mm==0) { B=Bid; mm=1;} 

OrderSelect(0,SELECT_BY_POS,MODE_TRADES); 

if ( (Bid> B+0.0002 ) && (OrdersTotal()==0 || OrderType()==OP_SELL) ) { My_close(); My_buy (); My_modify(); }  

if ( (Bid< B-0.0002 ) && (OrdersTotal()==0 || OrderType()==OP_BUY ) ) {My_close(); My_sell (); My_modify(); }
  

le fait est que les ordres s'ouvrent après 2pp dans leur propre direction.

ouvre la vente et se termine...

 

Bonne journée ! Pardonnez la trivialité. Les lignes proviennent d'un robot, j'ai le robot depuis des années et un cycle de ce type passe invariablement de l'un à l'autre.

 for(int i=OrdersTotal()-1;i>=0;i--) 
      {  if(OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)

Pourquoi le total de ma commande est-il inférieur à un ? Est-il vrai que la boucle va vers une diminution de la variable et ?

 

La fonction de Kim a le paramètre time ="Date et heure en secondes depuis 1970".

J'ai essayé 2 variantes.

et tous deux donnent un bénéfice non pas pour le jour en cours, mais un bénéfice total sur l'ensemble de l'historique.....

int t=(     TimeCurrent()-( (Hour()*3600) +(Minute()*60)+Seconds()   ) ); 
int t=(    (Hour()*3600) +(Minute()*60)+Seconds()    ); 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
  double p=0;
  int    i, 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=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}
 
Dimka-novitsek:

Bonne journée ! Pardonnez la trivialité. Les lignes sont tirées d'un robot. J'ai le robot depuis des années et un cycle de ce type passe invariablement de l'un à l'autre.

Pourquoi le total de ma commande est-il inférieur à un ? Est-il vrai que la boucle va vers une diminution de la variable et ?

La boucle compte un index de 0 à Total-1 ou de Total-1 à 0. C'est pourquoi elle a besoin d'un signe moins ou d'un signe plus petit < .
 
Zhunko:

Je le ferais :

double TradePrice(int    nPriceId, // Цена: 0 - Bid; 1 - Ask
                  string sSymbol)  // валютная пара
 {
  switch (nPriceId)
   {
    case 0: return(MarketInfo(sSymbol, MODE_BID));
    case 1: return(MarketInfo(sSymbol, MODE_ASK));
    default: Print("Ошибка и прочее...");
   }
  return(0);
 }

Recevoir des données viaMarketInfo(), même pour cet outil de fenêtre, serait trop coûteux en termes de ressources, ne pensez-vous pas ?

Zhunko:

Vous devez écrire une fonction distincte pour mettre à jour l'historique.


Je ne comprends pas bien la logique d'écrire une fonction séparée. La fonction RefreshRates() met elle-même à jour les données des variables prédéfinies. Et Bid et Ask sont des variables prédéfinies. Si la fonction RefreshRates() met à jour des variables prédéfinies, pourquoi écrire une fonction supplémentaire ?
 
Merci ! !!
 
solnce600:
Quel bouton utilise-t-il pour vous faire sourire ou vous remonter le moral ?

Urri ne le savait pas, et je ne connais pas non plus le bouton, mais parfois nous remuons la queue ... :)))
Raison: