Questions des débutants MQL5 MT5 MetaTrader 5 - page 65

 

Voici l'expert lui-même - j'ai nettoyé les choses inutiles - il y avait beaucoup de bashing :)

Dossiers :
 

Comment clôturer une commande ?

Je l'ai ouvert comme ça :

mrequest.action = TRADE_ACTION_DEAL ; // exécution immédiate

mrequest.price = NormalizeDouble(Ask,_Digits) ; // dernier prix Ask

mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digits) ; // Stop Loss (perte maximale)

mrequest.tp = 0 ; // Prise de profit

mrequest.symbol = _Symbol ; // symbole

mrequest.volume = Lots ; // nombre de lots à négocier

mrequest.magic = 1 ; // Nombre magique

mrequest.type = ORDER_TYPE_BUY ; // ordre d'achat

mrequest.type_filling = ORDER_FILLING_FOK ; // type de commande - tout ou rien

mrequest.deviation=100 ; // dérapage par rapport au prix actuel

CommandeEnvoi(mrequest,mresult) ;

Le problème est que nous avons plus d'un ordre ouvert, et nous devons fermer un ordre sélectif...

 
Forex_Noob: Comment clôturer une commande ?

Le problème est que ce n'est pas un ordre qui est ouvert, mais plusieurs, et nous devons fermer sélectivement...

1. Insérez le code correctement.

2. Si plusieurs ordres sont ouverts dans une même direction, le résultat est une position globale.

3. Pour fermer une position ouverte, vous devez placer des ordres de sens contraire, dont le volume global est égal au volume de la position à fermer.

4. S'il est nécessaire de fermer une partie seulement d'une position, il faut alors exposer des ordres de sens contraire avec un volume global correspondant.

 
Yedelkin:

1. Insérez le code correctement.

2. Si plusieurs ordres sont ouverts dans la même direction, le résultat est une position globale.

3. Pour fermer une position ouverte, vous devez placer des ordres de sens contraire, dont le volume global est égal au volume de la position à fermer.

4. Si une partie seulement d'une position doit être fermée, des ordres contraires doivent être placés avec le volume global correspondant.

Ok. Merci. Le seul problème est que les positions ne sont pas toujours fermées par un ordre de clôture...
 
Forex_Noob:
OK. Merci. Seulement maintenant un autre problème - l'ordre de fermeture ne ferme pas toujours les positions...
Regardez dans le journal de bord - les résultats y sont enregistrés.
 

Yedelkin,Reshetov,

Bonjour,

Quelle est la méthode la plus simple pour extraire les données d'un indicateur pour plusieurs paires ?

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
Merci d'avance.
 
mario065: Quelle est la méthode/méthode la plus simple pour obtenir les données d'un indicateur pour plusieurs paires?

C'est ce que vous voulez dire ?

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

Tu veux dire ça ?

Salut,

Bien sûr que non.

S'il y a plus d'une dinde, vous devez faire pour chacune autant de paires qu'elle mange.

Un seul gestionnaire pour que toutes les paires soient utilisées.

 
mario065: S'il y a plusieurs indicateurs, pour chacun d'eux il faut faire autant de fois que le nombre de paires mangent. Un seul manipulateur pour utiliser toutes les paires.

Vous voulez donc avoir une seule poignée, mais l'indicateur iATR fonctionne avec des caractères différents ?

D'après la description de l'indicateur iATR, vous pouvez voir qu'il est conçu pour fonctionner avec un seul symbole. Par conséquent, pour travailler avec 4 caractères, vous devez exécuter 4 copies de l'indicateur iATR . À son tour, le handle de l'indicateur est nécessaire pour accéder aux valeurs de la copie spécifique de l'indicateur, et si vous exécutez 4 copies de l'indicateur, vous devrez stocker les handles appropriés quelque part.

Si la question de l'utilisation d'une seule poignée est principale, nous devrons réécrire l'indicateuriATR pour qu'il fonctionne avec plusieurs symboles à la fois, qu'il ait le nombre correspondant de tableaux de valeurs, etc.Il sera alors possible d'utiliser une poignée

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

et l'utiliser pour adresser tel ou tel tampon indicateur de monATR.

 

Vous pouvez aussi l'écrire comme ceci (schématiquement) :

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }
Raison: