Comment récupérer les données d'un indicateur ? - page 6

 
Retabs:


Je vais me corriger. J'ai déjà inséréle code via le bouton SRC.

Pourquoi donc supprimer mon code s'il est, comme vous l'avez écrit, inséré selon les règles ?


Parce que vous devez proposer votre code collé selon les règles, pas moi le vôtre ! Je viens de le supprimer en rentrant chez moi !
 
borilunad:

Parce que vous devez proposer votre code collé selon les règles, pas moi le vôtre ! Je viens de le supprimer en rentrant chez moi !


Pouvez-vous me conseiller ? Comment permettre l'ouverture d'une nouvelle transaction uniquement lorsque les lignes de l'indicateur se recroisent, c'est-à-dire lorsque la valeur 1 n'est pas égale à la valeur 2 ? (code ci-dessus). En boucle ?

 
Retabs:


Pouvez-vous me dire, s'il vous plaît. Comment limiter l'ouverture d'une transaction jusqu'à ce qu'une autre soit fermée ? (code ci-dessus).


Avant d'ouvrir, mettez une condition : s'il n'y a pas de position, alors vous pouvez ouvrir !

Il existe de nombreuses fonctions différentes, mais pendant que vous les explorez, je vous suggère une fonction de secours qui convient à toutes les occasions !

if(OrderTotal() == 0)
{
  // потом остальные условия, чтобы зря не производить расчёты,
  // если пока ещё есть открытая позиция. 
  // Если понадобится открывать больше позиций, тогда проставите
  // допустимый максимум, например, 3 позиции:
if(OrderTotal() < 3)
{
  // Всё это не ленитесь находить в Документации! Замечено, что 
  // если находите сами и сами делаете, тогда ваши знания и навыки
  // будут крепкими!
  
 
<br / translate="no">
Borilunad:

Parce que vous devez proposer votre code collé selon les règles, pas moi le vôtre ! Je viens de le supprimer en rentrant chez moi !

Merci. J'ai revu mes conditions et j'ai réalisé que je n'avais pas tout à fait compris ce que je voulais. Je suis désolé.

Pouvez-vous me dire. Comment puis-je autoriser l'ouverture d' unenouvelle transaction uniquement lorsque les lignes de l'indicateur se recroisent, c'est-à-dire lorsque la valeur 1 n'est pas égale à la valeur 2 ? (code ci-dessus). N'autoriser qu'un seul trade entre 2 crossovers, quel que soit le nombre de trades passés ouverts à ce moment-là, et bien sûr sans les toucher.

J'ai essayé d'ajouter une nouvelle variable comme marqueur qui change de valeur pendant le passage, mais rien ne fonctionne.

Je pense que le seul moyen de s'en sortir est de saisir le moment où l'affaire est conclue et de remettre le marqueur à sa valeur initiale.

 
Retabs:


Veuillez me conseiller. Comment permettre l'ouverture d'une nouvelle transaction uniquement lorsque les lignes de l'indicateur se recroisent, c'est-à-dire lorsque la valeur 1 n'est pas égale à la valeur 2 ? (code ci-dessus). C'est une boucle ?


Pendant que je vous écrivais, vous avez ajouté des conditions que vous voulez voir écrites par moi ! C'est ici que vous devez trouver et écrire vous-même ce dont vous avez besoin, en regardant dans la Documentation et en observant votre graphique de séries temporelles, barres-candales, et approfondir l'étude du Tutoriel de Sergei Kovalev, qui explique tout de manière accessible !

Alors, ne perdez pas votre temps, lancez-vous dans l'étude, et le résultat sera au rendez-vous ! Et si vous utilisez des astuces, vous ne vous rendrez pas service, car même une évaluation environnementale rédigée par un professionnel a toujours besoin d'une gardienne, sans laquelle elle peut devenir grincheuse à tout moment et cesser de gagner de l'argent en raison des changements fréquents des habitudes du marché ! C'est pourquoi il faut toujours chercher de nouvelles solutions, expérimenter et changer un peu ou beaucoup de stratégie. Savoir ce que l'on a fait est beaucoup plus facile que de comprendre celle de quelqu'un d'autre ! Bonne chance à vous !

 
borilunad:


Pendant que je vous écrivais, vous avez ajouté des conditions que vous voulez voir écrites par moi ! C'est là que vous devez trouver et écrire vous-même ce dont vous avez besoin, en regardant dans la Documentation et en observant votre graphique de séries temporelles, barres-candles, et approfondir l'étude du Tutoriel de Sergey Kovalev, qui explique tout d'une manière facile à comprendre !

Alors ne perdez pas votre temps, lancez-vous dans l'enseignement, et vous obtiendrez des résultats ! Et en ce qui concerne les conseils, vous ne vous rendrez pas service, car même une évaluation environnementale rédigée par un professionnel a toujours besoin d'une gardienne, sans laquelle elle peut devenir grincheuse à tout moment et cesser de gagner de l'argent en raison des changements fréquents dans les habitudes du marché ! C'est pourquoi il faut toujours chercher de nouvelles solutions, expérimenter et changer un peu ou beaucoup de stratégie. Savoir ce que l'on a fait est beaucoup plus facile que de comprendre celle de quelqu'un d'autre ! Bonne chance à vous !


OK. Je n'abandonne pas la référence. Veuillez m'indiquer la direction à suivre pour "saisir le moment où la transaction a eu lieu et remettre le marqueur à sa valeur initiale".
 
Retabs:

Très bien. Je n'abandonne pas le certificat. Dites-moi dans quelle direction creuser pour "saisir le moment où l'échange a eu lieu, et remettre le marqueur à sa valeur initiale".


séries temporelles dans la documentation, barres et glissières sur le graphique ! Et vous apprendrez beaucoup de choses très utiles en cours de route ! Et le tutoriel !

Et ce n'est pas pour un jour ou deux d'apprentissage, des mois et des années, pour la vie si vous voulez vraiment savoir et savoir comment ! Bonne chance !

 
_new-rena:

Enfin.

L'erreur de 130 est due aux arrêts et aux reprises. Il devrait y avoir un niveau de prix à partir duquel ils devraient se déclencher. (il ne s'agit certainement pas d'attendre un taux de prix de -100 ou 60, cela devrait être comme Prix-100*Point ou Prix+60*Point, par exemple)


Veuillez me conseiller. Comment permettre l'ouverture d' unenouvelle transaction uniquement lorsque les lignes de l'indicateur se recroiseront, c'est-à-dire lorsque la valeur 1 ne sera pas égale à la valeur 2 ? Ne permettre qu'une seule transaction entre deux croisements, sans dépendre du nombre de transactions précédentes ouvertes à ce moment-là, et bien sûr sans les toucher.

//+------------------------------------------------------------------+
//|                                Sovetnik_RegressionPolynomial.mq4 |
//|                                                      Retabs 2014 |
//|                                                        www.----- |
//+------------------------------------------------------------------+
#property copyright "Retabs 2014"
#property link      "www.-----"
#property version   "1.00"
#property strict
//--- input parameters
input int   StopLoss=60;
input int   TakeProfit=100;
input double   Lots=0.10;
input int   Shift=5;

double SL;
double TP;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double val1=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val2=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);
   
   if(val1>val2)
   OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
   
   if(val1<val2)
   OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
  }
//+------------------------------------------------------------------+
 
Retabs:


Veuillez me conseiller. Comment permettre l'ouverture d' unenouvelle transaction uniquement lorsque les lignes de l'indicateur se recroiseront, c'est-à-dire lorsque la valeur 1 ne sera pas égale à la valeur 2 ? Ne permettre qu'une seule transaction entre deux croisements, sans dépendre du nombre de transactions précédentes ouvertes à ce moment-là, et bien sûr sans les toucher.

Comme ceci
void OnTick()
  {
//---
   double val10=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val20=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);

   double val11=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,1);
   double val21=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,1);
   
   if(val11 < val21 && val10>=val20)
   OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
   
   if(val11 > val21 && val10<=val20)
   OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
  }
 

Merci pour la réponse. A l'instant et j'ai moi-même trouvé des solutions, mais sur un principe différent. J'ai essayé le mien et le vôtre, ça semble correct.

//+------------------------------------------------------------------+
//|                                Sovetnik_RegressionPolynomial.mq4 |
//|                                                      Retabs 2014 |
//|                                                        www.----- |
//+------------------------------------------------------------------+
#property copyright "Retabs 2014"
#property link      "www.-----"
#property version   "1.00"
#property strict
//--- input parameters
input int   StopLoss=100;
input int   TakeProfit=160;
input double   Lots=0.10;
input int   Shift=5;

double SL;
double TP;
int    X=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double val1=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,0,0);
   double val2=iCustom(NULL,0,"RegressionPolynomial",10000,55,5,2,0,1,0);
   

   if (X>0 && val1==val2)
   Ctrl=0;
   
   
    if (X==0  )
      {
      if(val1>val2)
      OrderSend(Symbol(),OP_BUY, Lots,Ask,Shift,Ask-StopLoss*Point,Ask+TakeProfit*Point,"коммент",5371533,0,Red);
      Ctrl=Ctrl+1;
      }
      
    if (X==0 ) 
    
      {if(val1<val2)
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Shift,Bid+StopLoss*Point,Bid-TakeProfit*Point,"коммент",5371533,0,Blue);
      X=X+1;
      }
   
  }
//+------------------------------------------------------------------+

Mais voilà : au point de croisement visuel, les lignes sont en fait croisées plus d'une fois, le signal est donc reçu plusieurs fois et le conseiller expert a le temps de placer 4 à 30 ordres.

Nous devons nous débarrasser de cet inconvénient. La seule chose que j'ai inventée est de faire la moyenne des relevés précédents et de les comparer avec les relevés actuels. Logiquement, oui. Mais comment puis-je faire cela de manière programmatique ? Au secours !