[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 340

 

Je dessine un indicateur à des fins de formation (c'est-à-dire que j'apprends) et j'obtiens ce résultat lorsque je modifie les données :


Les lignes rouges et bleues ne se rejoignent pas de manière fluide.

Pourquoi cela se produit-il et comment puis-je le contourner ?

  for(i = limit; i >= 0; i--) 
    {
     cciTrendNow      = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i);
     cciTrendPrevious = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i+1);

     if (cciTrendNow > st && cciTrendPrevious < st)
      {
       TrendUp[i+1] = TrendDown[i+1];
       ArrayInitialize( TrendDown[i+1], 0 ); // Попытался обнулить, чтобы обойти некрасивую отрисовку.
      }

     if (cciTrendNow < st && cciTrendPrevious > st) 
      {
       TrendDown[i+1] = TrendUp[i+1];
       ArrayInitialize( TrendUp[i+1], 0 );   // Попытался обнулить, чтобы обойти некрасивую отрисовку.
      }
    }

Le problème apparaît sur cette partie du code. Mais comment le surmonter - je n'ai pas pu trouver ou penser à quelque chose moi-même. Veuillez me conseiller.

 
dyxaa:

Messieurs, comment fermer un ordre en suspens en n, nombre de pips s'il n'a pas été déclenché ?

Cliquez sur la croix !
 
artmedia70:

Je ne parlais pas de variables externes. Je parlais de ça.

Imaginons une situation. Une décision doit être prise en fonction du dernier poste ouvert.


Pour le testeur :

Nous créons des variables, dans lesquelles nous allons stocker les données nécessaires de la dernière position ouverte.

Dès qu'une nouvelle position est ouverte, nous ajoutons immédiatement les données requises dans ces variables.

Lorsqu'un signal d'ouverture d'une nouvelle position est émis (par exemple, après 20 minutes de test), nous devons vérifier certains critères qui nous permettent de décider des données de la position à ouvrir. Ces critères, par convention, dépendent du précédent poste ouvert. Nous les lisons à partir de variables (nous les avons sauvegardées lors de l'ouverture précédente) et les utilisons comme données supplémentaires pour une nouvelle position.

Lorsque nous ouvrons une position, nous stockons les nouvelles données concernant la position nouvellement ouverte dans les variables.


Pour de vrai :

Imaginons la même situation, mais... Imaginez qu'après l'ouverture de la dernière position et le stockage de ses données dans des variables, 10 minutes se sont écoulées (10 autres minutes doivent s'écouler avant l'ouverture de la position suivante (nous venons de supposer que c'est le cas dans un "testeur")). Et dans cet intervalle de temps, le conseiller expert a été redémarré pour une raison quelconque.

Que se passe-t-il après le redémarrage de l'EA avec les données de la dernière position ouverte, qui ont été stockées dans les variables ? Ils n'existeront pas.

Alors où devons-nous les trouver ? Droite - recherche. C'est pourquoi nous avons besoin de la fonction de recherche des données nécessaires. Il est donc préférable de tout trouver en une fois, au moment où l'on en a besoin, et de ne pas le stocker dans des variables, ce qui est vraiment beaucoup plus facile et rapide.


Désolé pour la clarification tardive - je viens juste de sortir dans le monde ... :))



Merci Artyom. Tout cela a un sens, bien sûr. C'est pourquoi j'apprends à écrire avec des fonctions. Mais parfois la logique n'est pas si bonne. C'est pour ça que je trébuche. La dernière fois que j'ai résolu ce problème en étendant toutes les données de la boucle d'une fonction à l'autre, j'ai fait une pause de quelques jours dans la programmation en général, pour reprendre mes esprits. Maintenant, je vais continuer !
 
solnce600:

Messieurs, veuillez m'indiquer comment coder l'algorithme suivant en utilisant une boucle.

si (iLow (Symbole (),0,1) > iLow (Symbole (),0,10))// si le MINIMUM de la première bougie > MINIMUM de la dixième bougie

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ) ; // ouvre l'ordre.

JE DOIS DEVOIR DEVOIR

Si Low 1 et simultanément Low 2 et simultanément Low 3...... . ...et simultanément bougie basse 9> bougie basse 10 ( c'est-à-dire bougie basse de 1 à 9)

/ /ouvrir une commande.

Merci.

Si j'ai bien compris votre question, le code serait le suivant .

bool have = true;

for (int i=0; i<10; i++)
  {
   if (Low[i] > Low[10])        // Как вариант:  if ( iLow(Symbol(),0,i) > iLow(Symbol(),0,10) )
    {
     have = false;
     break;
    }
  }

if(have) OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point,"jfh",123 );    //открыть ордер.

Mais c'est avec l'indication de la FAQ. Je n'aurais pas pu le faire sans ça.

 

J'ai une idée, mais je ne sais pas vraiment comment la mettre en œuvre dans la vie réelle et comment elle fonctionnera de manière fiable dans la vie réelle.

L'essentiel est le suivant. Nous devons entrer sur le marché après avoir placé la chouette sur le graphique immédiatement après la fermeture de la barre, c'est-à-dire à l'ouverture d'une nouvelle barre. C'est la première commande. De plus, lorsque l'ordre est fermé par un TP ou un prix Stop, nous devons ouvrir un ordre à l'ouverture d'une nouvelle barre immédiatement. Comment le faire de manière plus raisonnable ?

Je comprends que nous devrions créer une variable. Placez-y le prix ouvert de la barre actuelle. Et comparez cette valeur avec le prix d'ouverture de la barre actuelle. Si la valeur de la variable n'est pas égale au prix d'ouverture de la barre courante avec l'indice zéro, nous ouvrirons un ordre.

Est-ce la meilleure option ?

 
Chiripaha:

Je dessine un indicateur à des fins de formation (c'est-à-dire que j'apprends) et j'obtiens ce résultat lorsque je modifie les données :


Leslignes rouges et bleues ne se confondent pas.

Pourquoi cela se produit-il et comment puis-je le contourner ?

Le problème apparaît sur cette partie du code. Mais comment le surmonter - je n'ai pas pu le découvrir ou trouver quelque chose moi-même. Pouvez-vous me dire, s'il vous plaît.


Ouf !... J'ai trouvé la solution... : )))

Maintenant, si je pouvais seulement régler le reste du problème, ça irait tellement mieux. Merci à tous ceux qui ont voulu aider ! : ))

J'ouvre 2 autres tampons exactement identiques - ils ne dessinent pas... Quelle est la magie... - OK, nous allons étudier et chercher. C'est quand même dommage de perdre du temps sur le "vélo". Quand, dans ce cas, en inventer un nouveau ?

 
hoz:

J'ai une idée, mais je ne sais pas vraiment comment la mettre en œuvre dans la vie réelle et comment elle fonctionnera de manière fiable dans la vie réelle.

L'essentiel est le suivant. Nous devons entrer sur le marché après avoir placé la chouette sur le graphique immédiatement après la fermeture de la barre, c'est-à-dire à l'ouverture d'une nouvelle barre. C'est la première commande. De plus, lorsque l'ordre est fermé par un TP ou un prix Stop, nous devons ouvrir un ordre à l'ouverture d'une nouvelle barre immédiatement. Comment le faire plus raisonnablement ?

Je comprends que nous devrions créer une variable. Placez-y le prix ouvert de la barre actuelle. Et comparez cette valeur avec le prix d'ouverture de la barre actuelle. Si la valeur de la variable n'est pas égale au prix d'ouverture de la barre courante avec l'indice zéro, nous ouvrirons un ordre.

Est-ce la meilleure option ?


S'il est mis en œuvre, il fonctionnera de manière aussi fiable dans les transactions réelles que sur la démo. Mais pas le fait qu'il sera rentable.

Vous devez ouvrir une commande et c'est tout . Mais vous n'avez pas formulé dans quel sens l'ordre doit être ouvert et dans quelles conditions ce côté est déterminé.

Vous n'avez pas besoin de comparer quoi que ce soit - il suffit d'ouvrir un ordre lorsqu'une nouvelle barre apparaît (en fonction de vos données).

newBars = iBarShift(Symbol(), PERIOD_H1, lastH1BarTime);    // Это было найдено через поиск на форуме

Si vous n'en avez aucune idée :

"Et l'expérience est le fils des erreurs difficiles.
Et le génie est l'ami des paradoxes" (Alexandre Sergueïevitch pour votre aide).

Vous devez fabriquer (écrire) un hibou et le vérifier expérimentalement. - Je ne pense pas que quelqu'un puisse écrire la chouette pour vous (gratuitement). Vous donner un indice est une chose. Mais la mise en œuvre des idées (pensées) n'est pas une aide, mais un travail.

 
borilunad:
Cliquez sur la croix !

Exactement. Brillamment simple))))

Je demande votre aide) voici mettre un ordre en attenteachetons stop par exemple j'ai besoin qu'il supprime si le prix a passé 100 points en bas il peut le faire ?

 
borilunad:
Cliquez sur la croix !

Exactement. Brillamment simple))))

Je demande votre aide) voici mettre un ordre en attenteachetons stop par exemple j'ai besoin qu'il supprime si le prix a passé 100 points en bas il peut le faire ?

 
dyxaa:

Exactement. Brillamment simple))))

J'ai besoin d'un stop d'achat si le prix baisse de 100 pips pour le supprimer.

Vous le mettez de manière programmatique ou manuelle ?

Si c'est manuellement, alors fermez-le (mieux) manuellement.

Si cela est fait de manière programmatique (par le biais d'un conseiller expert), il faut alors passer en revue les ordres et trouver le bon. Ensuite :

if (Bid < OrderOpenPrice()-100*Point) OrderDelete(OrderTicket());   // Это для Вашего типа ордера - Бай-Стоп

Si vous ne savez pas comment effectuer le dépassement et les autres actions les plus simples, commencez par lire un manuel sur le MCL. Parce que dans ce cas, il est peu probable que vous soyez en mesure de faire face au code.

Raison: