[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 606

 
Roger:


Montrez la fonction elle-même.

Si c'est void ClosePartPosBySelect(double Part), changez en

void ClosePartPosBySelect()

Mais comment passer un paramètre dans cette fonction ? Supposons :
if (x==2 && y==4) Part=0.5;
else Part=2;

ClosePartPosBySelect(Part);

La fonction ClosePosBySelect() de Kim est modifiée de sorte qu'elle nécessite un paramètre passé de type double, qui est la variable Part

 
keekkenen:

deux façons

1) Dans la fonction où la valeur est modifiée, ajoutez une esperluette,

Par exemple, void function( double& Part ){}

alors, lorsqu'une valeur à l'intérieur de la fonction est modifiée, la nouvelle valeur retourne à l'endroit de l'appel.

2. retirer la variable de la liste des paramètres de la fonction, puisque la variable est définie globalement, sa valeur peut être modifiée à n'importe quel endroit du code sans la passer en paramètre...

La première variante est meilleure, puisqu'il peut y avoir plus d'une variable déclarée globalement (et à l'intérieur d'une fonction)...


J'ai parcouru le post, en fait, la réponse a déjà été donnée...

Merci, je vais essayer...
 
zelek:

Bonjour chers professionnels.

J'aimerais vraiment écrire un EA qui ouvrirait deux ordres de vente et d'achat en même temps.

Ensuite, après un certain nombre de points (paramètre lim), l'ordre perdant serait fermé,

et un ordre rentable sera clôturé lorsque le prix aura chuté en dessous du prix maximum depuis l'ouverture de l'ordre.

(une sorte de trailing stop virtuel).

Dans l'agonie, j'ai créé ceci, mais cela ne fonctionne pas... ne fonctionne pas

Veuillez suggérer quelque chose

Comment pensez-vous que vous allez décider s'il s'agit d'un pullback ou d'un reversal ? Ou bien allez-vous ouvrir deux positions à chaque repli ? C'est un échec...
 
artmedia70:
Comment passer un paramètre à cette fonction alors ?


Si le paramètre est déclaré globalement, vous n'avez pas besoin de le passer, affectez directement la valeur souhaitée. Ce n'est que dans ce cas qu'il n'est pas nécessaire de le remplacer dans la fonction.
 
C'est intéressant...

C'est l'ensemble de l'année 2009... Seules les lectures de Momentum sont utilisées pour l'entrée :
Sur le TF H1 nous cherchons le moment de la rupture du mouvement Momentum, et sur le TF M5 nous trouvons le moment exact pour entrer sur le marché. Lors de l'ouverture d'une position, nous vérifions l'heure d'ouverture de la position précédente, afin de ne pas ouvrir la totalité du dépôt au moment du signal d'entrée...
Le moment d'entrer sur le marché est confirmé par la position du Demarker dans les zones de surachat/survente sur les TF M5 et M15...
... D'ailleurs, sans casiers, c'était aussi positif.

... Même le fait que j'ai négligemment effectué le test uniquement avec Demarker, a donné des résultats intéressants :

C'est quelque chose comme ça quelque part :

//---------------------------------------------------------
   MomML_0   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,0);
   MomML_1   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,1);
   MomML_2   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,2);
   
   MomST_0  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,0);
   MomST_1  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,1);
   MomST_2  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,2);
   
   DeM5     =iDeMarker(NULL,PERIOD_M5, 14,0);
   DeM15    =iDeMarker(NULL,PERIOD_M15,14,0);

//---------------------------------------------------------
//==============================================================================================
   // Поиск пересечений
//==============================================================================================  
//----------------------- Проверка условий для старшего ТФ --------------------    
// ---------- Покупка --------
   MomBuy56M15=false;
   if (
         MomST_0<100 && 
         MomST_1<100 && 
         MomST_2<100 &&
         MomST_0>MomST_1 &&
         MomST_1<MomST_2 &&
         DeM15<0.3
      )                                
         {   
            MomBuy56M15=true;
         }

// ---------- Продажа --------
   MomSell56M15=false;
   if (
         MomST_0>100 && 
         MomST_1>100 && 
         MomST_2>100 &&
         MomST_0<MomST_1 &&
         MomST_1>MomST_2 &&
         DeM15>0.7
      )                                
         {   
            MomSell56M15=true;
         }
//----------------------- Проверка условий для младшего ТФ ---------------------    
// ---------- Покупка --------
   MomBuy56M5=false;
   if (
         MomML_0<100 && 
         MomML_1<100 && 
         MomML_2<100 &&
         MomML_0>MomML_1 &&
         MomML_1<MomML_2 &&
         DeM5<0.3   
      )                                
         {   
            MomBuy56M5=true;
         }

// ---------- Продажа --------
   MomSell56M5=false;
   if (
         MomML_0>100 && 
         MomML_1>100 && 
         MomML_2>100 &&
         MomML_0<MomML_1 &&
         MomML_1>MomML_2 &&
         DeM5>0.7   // ... и тут ...
      )                                
         {   
            MomSell56M5=true;
         }      

//==============================================================================================
   // Вычисление основных торговых критериев
//====================================================================  
   if (
         MomBuy56M15==true &&
         MomBuy56M5 ==true
      )
      
      return(106);                       // Открытие Buy по стратегии 6 
 //====================================================================   
 
   if (
         MomSell56M15==true &&
         MomSell56M5 ==true
      )
      
      return(206);                       // Открытие Sell по стратегии 6 
 //====================================================================   

Je me demande, si le résultat est similaire, pourquoi utiliser le momentum, qui est bon (comme on dit) pour montrer le moment de l'épuisement de la tendance (fin) ? Lors des ruptures de momentum, le prix a continué à monter et des positions ont été ouvertes à chaque nouvelle rupture de momentum... C'est donc les premières entrées que j'ai décidé de verrouiller...
Qu'en pensez-vous ?

 

vous ne pouvez pas utiliser la barre zéro dans le testeur, pour la simple raison que malgré le fait qu'elle est seulement en cours de formation (ticks du testeur) le testeur a des informations complètes sur les prix de cette barre, parce qu'elle (la barre) est un fait accompli et le testeur regarde dans le futur en prenant les données de l'historique des cotations, pas ce qu'il génère avec les ticks... déplacez une barre vers la gauche et considérez les Momentums pour 1,2,3 au lieu de 0,1,2 et demo 1 au lieu de 0...

Il est également judicieux de n'utiliser que les m5 actuels et de multiplier les périodes où des prix plus anciens sont utilisés. 14 * PERIOD_H1 / Période() et 14 * PERIOD_M15 / Période()

 
keekkenen:

vous ne pouvez pas utiliser la barre zéro dans le testeur, pour la simple raison que malgré le fait qu'elle est seulement en cours de formation (ticks du testeur) le testeur a des informations complètes sur les prix de cette barre, parce qu'elle (la barre) est un fait accompli et le testeur regarde dans le futur en prenant les données de l'historique des cotations, pas ce qu'il génère avec les ticks... déplacez une barre vers la gauche et considérez les Momentums pour 1,2,3 au lieu de 0,1,2 et demo 1 au lieu de 0...

Il est également judicieux de n'utiliser que les m5 actuels et de multiplier les périodes où des prix plus anciens sont utilisés. 14 * PERIOD_H1 / Période() et 14 * PERIOD_M15 / Période()

Pourquoi, si nous imprimons tous les prix de clôture de la barre zéro dans le testeur, le prix est différent à chaque tick ? La même chose sur des échelles de temps plus élevées, la même chose sans visualisation. Alors où est la visualisation ?
 
enfin, si le résultat (dynamique) n'est pas très différent de celui obtenu avec une barre de zéro, il n'y a peut-être pas de peek, mais il vaut mieux se prémunir contre les illusions...
 

Je me suis déjà creusé les méninges :) - Voilà le problème :

L'EA fonctionne en mode semi-automatique - ses entrées sont mes sorties de positions, mais je n'arrive pas à comprendre - comment faire pour que l'EA ne fasse qu'une seule transaction avant ma commande pour la suivante, c'est à dire que je n'ai pas de bouton start/start sur le graphique :) . Ma section init() est occupée, et je ne peux pas désactiver mon EA - ses calculs sont nécessaires pour un chalutage correct

 
keekkenen:
enfin, si le résultat (dynamique) n'est pas très différent de celui obtenu en utilisant une barre de zéro, il n'y a peut-être pas de peeking, mais il vaut mieux se prémunir contre les illusions...
Toutes les illusions peuvent être des illusions, mais à la fin de 2008, toute la grande fraternité des limites déclenchées, ajoutant fidèlement de la dépo, ne pouvait pas faire face au drawdown, formé par les positions ouvertes en utilisant les signaux des indécis, et voilà, l'appel tant attendu de l'oncle Kolya ... :)

Comment est-il possible de résoudre de tels problèmes ?


Peut-être existe-t-il un moyen de réduire ce glissement ? Votre avis ?