Question sur le conseiller multi-devises

 

Bonsoir !

J'envisage de combiner deux paires en une seule EA. Je l'ai fait.

Mais soudain, j'ai eu des doutes. Je l'ai fait comme ça :

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
double A = iRSI("GBPUSD", 0, .....);
double B = iRSI("GBPUSD", 0, .....);
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
//------------------------------------------------------
if (GBP) {//если есть разрешение true
if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }

En ligne et dans le testeur de stratégie, tout fonctionne ! Peut-être que ce n'est pas tout à fait la bonne façon de faire :

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
//------------------------------------------------------
if (GBP) //если есть разрешение true{
 
double C = iRSI("GBPUSD", 0, .....);
double D = iRSI("GBPUSD", 0, .....); 
 if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
 if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }
La deuxième option semble également fonctionner dans le testeur.

Mais quelle est la meilleure façon de le faire ?

 
rid:

Bonsoir !


J'envisage de combiner deux paires en une seule EA. Je l'ai fait.


Mais soudain, j'ai eu des doutes. Je l'ai fait comme ça :

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
double A = iRSI("GBPUSD", 0, .....);
double B = iRSI("GBPUSD", 0, .....);
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
//------------------------------------------------------
if (GBP) {//если есть разрешение true
if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }

En ligne et dans le testeur de stratégie, tout fonctionne ! Peut-être que ce n'est pas la bonne façon de faire :

extern bool    GBP=true;
extern bool    EUR=true;
- - - - - - - - - - - - - - - - - - - -
int start()
  {
//------------------------------------------------------
if (GBP) //если есть разрешение true{
 
double C = iRSI("GBPUSD", 0, .....);
double D = iRSI("GBPUSD", 0, .....); 
 if (A<B)
{
double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if (EUR) { //если есть разрешение true
 
double C = iRSI("EURUSD", 0, .....);
double D = iRSI("EURUSD", 0, .....);
 if (C>D)
{
double   BID = MarketInfo("EURUSD", MODE____BID);
 double   ASK = MarketInfo("EURUSD", MODE____ASK);
 double POINT =MarketInfo("EURUSD",MODE____POINT);
(ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return(0);  
  }
La deuxième option semble également fonctionner dans le testeur.

Mais quelle est la meilleure façon de le faire ?




J'ai l'habitude de calculer toutes les valeurs des indicateurs au début, c'est-à-dire à la variante 1, c'est plus facile, on ne s'embrouille pas et le code est plus structuré.
 

Merci ! Pour la réponse. Une dernière question. Les stops suiveurs ne veulent pas fonctionner. Ils fonctionnent individuellement dans le testeur !

Mais en ligne, ça marche pour une paire. Mais pour un autre, il génère une erreur - juste après avoir attaché le conseiller expert.

Mais les affaires vont - seulement sans chalut sur la deuxième paire.

Erreur 130 en modifiant SL

int start()
  {
РАСЧЁТ  ИНДИКАТОРОВ 
{
ПОКУПКА/ПРОДАЖА
  }
 
for (int j=0; j<OrdersTotal(); j++)                                    {
    if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES))                     {
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1)          {
ИДЕТ КОД 1 ТРЕЙЛИНГА.
   }
 
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2)          {
ИДЕТ КОД 2 ТРЕЙЛИНГА
}
 
return(0);  
  }
Les codes de queue sont les mêmes, mais les variables externes et internes ont des caractères différents.

Je ne comprends pas ce qui ne va pas. Peut-être que quelqu'un me le dira ?

 
essayez comme ceci
int start()
{
//РАСЧЁТ  ИНДИКАТОРОВ 
 
//ПОКУПКА/ПРОДАЖА
  
 
for (int j=0; j<OrdersTotal(); j++)
  {
    if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
       {
          if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1)         
              {
                  ИДЕТ КОД 1 ТРЕЙЛИНГА.
              }
          if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2)   
              {
                  ИДЕТ КОД 2 ТРЕЙЛИНГА
              }
        }
   }
 
 
  return(0);  
}
 
structurer le code, il sera plus facile à comprendre pour les gens et pour vous.
 

Je vais essayer, merci.

 

Cela semble fonctionner !

Pas encore d'erreur. J'attends les bénéfices pour vérifier le chalut.

Plus de questions. Si ça ne vous dérange pas.

On est loin des exemples les plus simples d'expériences multidevises. Et lorsqu'ils sont disponibles, ils ne sont pas faits pour les esprits faibles. C'est trop compliqué de tout comprendre.

Il y en a un dans mon code :

 double   BID = MarketInfo("GBPUSD", MODE_BID);
 double   ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);
//-------Проверяем условие на покупку-------------
if  (

Cependant, dans les rares exemples sur ce site où un bloc similaire est présent, il y a une ligne :

RefreshRates();
 double BID = MarketInfo("GBPUSD", MODE_BID);
 double ASK = MarketInfo("GBPUSD", MODE_ASK);
 double POINT =MarketInfo("GBPUSD",MODE_POINT);

J'ai également inséré cette ligne. Il a compilé. Mais je ne remarque aucun changement dans les performances.

A quel point est-il nécessaire ici ? Peut-être devrait-on le laisser dans mon EA. Il fonctionne sur toutes les tiques. Et il utilise un tableau de valeurs -

//------заполняем массив значениями RSI GBPUSD -----------
 double RSI_array[30];
int    i=0;
while (i<31)
 {
RSI_array[i]=iRSI("GBPUSD",0,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i);
i++;

 
le principe de l'Expert Advisor multi-devises est approximativement le suivant :
1. dans le calcul des indicateurs pour spécifier des devises et des intervalles de temps spécifiques, par exemple : iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i) ; //mais voici une erreur
2. obtenir des prix, des points, etc. en utilisant MarketInfo.
3. utiliser iLow(...) au lieu de Low[0] par exemple
et s'appliquent à toutes les paires de devises.
Bonne chance.
 

J'ai eu l'erreur ! Au lieu de "0" - j'ai mis dans les variables de l'indicateur pour les devises - l'horizon temporel sur lequel le conseiller expert travaille.

Mon conseiller expert semble fonctionner sans problème. Et les chaluts fonctionnent aussi.

Et une dernière question, j'espère. J'en ai inséré un autre. Mais il ne s'agit pas de l'indicateur intégré mais d'un indicateur personnalisé. Dans le testeur, cette paire fonctionne. Mais en ligne, ce ne sera pas le cas ! Il génère quelque chose d'étrange : presque chaque seconde, cet indicateur est placé et supprimé. ..... - Des conseils ?

//***************************************************************

kLerk ! De tous les experts présents cette semaine, vous êtes le seul à avoir répondu à ma question. Et j'ai obtenu les réponses dont j'étais le plus satisfait. ( Sauf pour la question sur RefreshRates() )

Veuillez indiquer votre adresse électronique ici.

En gage de ma gratitude, je vous enverrai un simple "Graal" du trading - EA ! qui a été inventé par mon bon ami. (D'accord) Je travaille avec lui avec une confirmation manuelle. Je l'utilise comme une confirmation manuelle. Je n'utilise que deux indicateurs induits intégrés.

Sans ironie, - que c'est vraiment presque un "Graal" (à une certaine compétence de travail avec lui), - vous verrez après quelques minutes après l'avoir reçu ! Cependant - que chacun y jette un coup d'œil :

Le symbole ---------

Période 30 minutes (M30) 2007.01.02 11:00 - 2007.08.15 00:00

Modèle Tous les ticks (basé sur toutes les plus petites périodes disponibles avec interpolation fractale de chaque tick)

Qualité de la modélisation 67,35

Dépôt initial 10000.00

Bénéfice net 4009.24

Total des bénéfices 6335.06 Total des pertes -2325.82

Rentabilité 2,72 Gain attendu 21,44

Déplacement maximal 245,63 (2,18%) Déplacement relatif 2,18% (245. 63)

Total des transactions 187

Positions courtes (% de gain) 71 (80,28%)

Positions longues (% de gain) 116 (68,10%)

Transactions rentables (% de toutes) 136 (72,73%)

Transactions à perte (% du total) 51 (27,27%)

Plus grande transaction profitable 145.02, transaction perdante -47. 77

Moyenne des transactions rentables 46.58, des transactions perdantes -45.60

Nombre maximum de victoires continues (profit) 9 (586. 96)

pertes continues (perte) 4 (-189.99

Et voici la mire hors échantillon pour novembre/décembre de l'année précédente 2006 :

 
rid:

En gage de ma gratitude, je vous enverrai un simple "graal" du trading - un conseiller !

Félicitations, Klerk, tu as obtenu le Graal gratuitement !
 
<< Imprime quelque chose d'incompréhensible : presque chaque seconde, cet indicateur est mis et retiré....... - >>

Il est probable que les paramètres réels avec lesquels l'indicateur personnalisé est appelé ne correspondent pas aux paramètres formels listés avec la clé extern dans le listing (nombre, ordre, type, ...). C'est une erreur assez courante.
Raison: