FORTS Veuillez nous aider - page 30

 
demonsn:
Merci. Ajout de votre option comme contrôle parallèle. Maintenant, il s'agit juste d'attraper le bon moment.

Je suis sûr à 100% que ça va marcher !

Parce que vous n'avez pas rempli la structure correctement (pas seulement les champs, mais aussi les valeurs).

C'est étrange que le compilateur n'ait pas "juré".

Vous :

MqlTradeRequest.action = TRADE_ACTION_DEAL;

Il le faut :

MtRequest.action = TRADE_ACTION_DEAL;
 

Mais non ! Le code dans mon message ne provient pas de l'Expert Advisor, c'est un fragment corrigé des logs où les informations de débogage sont écrites depuis l'Expert Advisor. C'est ma faute, mon erreur.)

L'EA elle-même remplit la structure comme il se doit, mais le résultat de la vérification est différent. Soit il calcule la marge correctement, soit il donne un résultat absurde comme dans l'exemple.

Voici un fragment du site en direct

   MqlTradeRequest MtRequest = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.tp        = 0.0;
   MtRequest.sl        = 0.0;
   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 0;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.deviation = Config.Deviation;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
 

Faites-le :

   MqlTradeRequest MtRequest = {0}; 
   MqlTradeRequest MtResult = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 77777777777777;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
   MtRequest.type_time = ORDER_TIME_DAY;
 

Voici un autre moment du journal :

 MqlTradeRequest structure:
   action: Action Deal
   magic: 0
   order: 0
   symbol: Si-12.15
   volume: 2.00
   price: 63365
   stoplimit: 0
   sl: 0
   tp: 0
   deviation: 50
   type: ORDER_TYPE_SELL
   type_filling: ORDER_FILLING_FOK
   type_time: gtc
   expiration: 1970.01.01 00:00
   comment: (null)

 MqlTradeCheckResult structure:
   retcode: 10019 (There is not enough money to complete the request)
   balance: 133921.71
   equity: 132772.57
   profit: 0.00
   margin: 172148.68
   margin_free: -39376.11
   margin_level: 77.13
   comment: No money

Je passe la même structure à OrderSend() et tout s'ouvre parfaitement !

Au fait, construire 1194.

Vente de Si-12.15, 2 lots. Le GO pour 1 contrat est de 5090 roubles. Une transaction devrait avoir le QR 5090*2 = 10180 RUB. Mais la fonction renvoie 172148,68 RUB, ce qui équivaut à 172148,68 / 5090 = 33,82 contrats !

Quel miracle...

 
demonsn:

Voici un autre moment du journal :

Je passe la même structure à OrderSend() et tout s'ouvre bien !

Au fait, construire 1194.

Vente de Si-12.15, 2 lots. Le GO pour 1 contrat est de 5090 roubles. Une transaction devrait avoir une SE de 5090*2 = 10180 roubles. Et la fonction renvoie 172148,68 roubles, ce qui correspond à 172148,68 / 5090 = 33,82 contrats !

Quelles merveilles...

1. Je vous ai donné un exemple de la façon de remplir correctement la structure, et vous ignorez ce conseil.

Alors pourquoi vous demandez ?

2. La build 1194 n'est pas compatible avec les serveurs actuels (Renat l'a mentionné, utilisez la build 1159 pour le moment).

3. je n'utilise pas du tout OrderCheck(), je vérifie moi-même les fonds.

//+------------------------------------------------------------------+
//| Expert Check money function                                      |
//+------------------------------------------------------------------+ 
bool CheckMoney( const string a_symbol, const long volume )
{
  if ( volume <= 0 )
  {
    Print( "Check Money: Объём лота указан не правильно!" );
    retutn ( false );
  } 
//---
  double a_go = SymbolInfoDouble( a_symbol, SYMBOL_MARGIN_INITIAL ) * double( volume);
  double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90; //90% от свободных средств
//---  
  if ( a_go <= free_margin )
  {
    return( true );
  }
  Print( "Check Money: Не достаточно средств!" );
  return( false );
}
 
Михаил:

1. Je vous ai donné un exemple de la manière de remplir correctement la structure et vous ignorez ce conseil.

Pourquoi demandez-vous alors ?

2) La build 1194 n'est pas compatible avec les serveurs actuels (Renat l'a mentionné, utilisez la build 1159 pour le moment).

3. je n'utilise pas du tout OrderCheck(), je vérifie moi-même les moyens.


1. Je ne l'ignore pas du tout. Je ne l'ignore pas du tout. J'ai inclus votre exemple dans le code, maintenant je l'observe.

2. Oh, mec ! Je ne le savais pas.

3. J'ai fait la même chose. Et la fonction est presque exactement la même, sauf à 90% (bonne idée, d'ailleurs).

J'ai posé cette question parce que ma fonction (similaire à la vôtre) vérifie le CS et permet d'ouvrir la position, alors que la fonction standard OrderCheck() échoue parfois.


Il s'agit probablement du point 2.

Dans le journal du terminal, il y a beaucoup de messages comme :

2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:27:40.995 Ticks   old tick @LKOH (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:27:40.995 Ticks   old tick LKOH-12.15 (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
 
demonsn:


1. Pourquoi devrais-je l'ignorer ? Je ne l'ignore pas du tout. J'ai inclus votre exemple dans le code, maintenant je regarde.

2. Oh, mec ! Je ne le savais pas.

3. J'ai fait la même chose. Et la fonction est presque exactement la même, sauf 90% (bonne idée, d'ailleurs)

J'ai précisément soulevé cette question parce que ma fonction (similaire à la vôtre) vérifie le CS et permet d'ouvrir la position, alors que la fonction standard OrderCheck() se bloque parfois.

Utilisez donc le vôtre sur FORTS - c'est beaucoup plus correct :)
 
Михаил:
Utilisez donc tous les vôtres sur FORTS - c'est beaucoup plus correct :)

C'est comme ça qu'on finit par le faire ! Tenté quelque part d'utiliser le code ou la bibliothèque de quelqu'un d'autre, afin de gagner du temps pour écrire une "roue" ou tester une idée.

Mais au final, vous devez passer une semaine à corriger les erreurs et les défauts des autres développeurs. À la fin, tout est réécrit pour vous, de sorte qu'il n'y a aucune trace du code d'autres personnes.

 

Bonjour !

Les collages de contrats à terme sont apparus dans la fenêtre de test, ce qui en soi est très agréable. Cependant, lorsque j'ai essayé de faire correspondre le collage avec le contrat, j'ai constaté qu'il n'y avait pas du tout de transactions sur le collage - tout va bien sur les contrats - il y a beaucoup de transactions. J'ai vérifié sur quatre instruments Si,RTS,GAZR,SBRF et la période 01.01.2015 -24.10.2015.

 
Andrey Kotrin:

Bonjour !

Les collages de contrats à terme sont apparus dans la fenêtre de test, ce qui en soi est très agréable. Cependant, lorsque j'ai essayé de faire correspondre le collage avec le contrat, j'ai constaté qu'il n'y avait pas du tout de transactions sur le collage - tout va bien sur les contrats - il y a beaucoup de transactions. J'ai vérifié sur quatre instruments Si,RTS,GAZR,SBRF et la période 01.01.2015 -24.10.2015.

Le testeur ne fonctionne pas correctement sur les futurs.