[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 26

 
Code:


Merci de votre réponse et je vais répondre à vos questions.

Cette caractéristique est exactement l'idée maîtresse de l'indicateur. Et en même temps, c'est un exercice de MQL. J'ai imaginé une tâche et je comprends intuitivement que sa mise en œuvre dans un langage n'est pas très difficile. Je m'assois et j'essaie.

Ainsi, l'essence de la caractéristique est que je compare un certain niveau théorique fixe de deux volumes unidirectionnels avec le niveau réel. En d'autres termes, si le rapport réel entre la somme des deux volumes et l'intervalle "ouverture-fermeture" réel est supérieur au rapport théorique spécifié, j'ajoute un "bonus" au deuxième volume réel sous la forme de la différence entre les résultats théorique et réel calculés. Si le niveau réel est inférieur au niveau théorique, je soustrais la même différence du volume de la deuxième barre. Je peux l'expliquer clairement ?

Juste au cas où, je dirai qu'en révélant cette caractéristique, vous avez mal mis les parenthèses, probablement dans la précipitation.

D'ailleurs, il me semble que les chaînes que vous considérez comme équivalentes aux miennes conduiront à la division par zéro. Je vais vérifier maintenant.

C'est clair. Mais la relation entre 2 (la moyenne entre les deux volumes) et ce qui est calculé dans la variable UP12 n'est pas claire. Après tout, les dimensions des deux sont différentes. Les temps et le prix aux dénominateurs. Après tout, à l'école, on nous a appris que les mètres et les kilogrammes ne s'additionnent pas du tout ! :))))


C'est vrai, c'est faux ! :)))) C'est une chose d'avoir des formules sous forme de fractions, mais c'en est une autre de tout mettre sur une ligne et de ne pas comprendre comment... C'est de l'inattention, pas de la précipitation...

J'ai aussi optimisé le code de façon incorrecte. Là encore, il s'agissait d'une erreur mathématique. J'ai oublié de mettre entre parenthèses.

   double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);
 
Roman.:

Votre argument n'est pas du tout le bon... à de mauvais critères de trading, la question concerne le STOHAS-TEAM... :-Р

La question était la suivante :

des idées pour la vie:

Si la condition1 est remplie, alors :
-vérifier les ordres de VENTE ouverts
S'il y en a - fermez-les
-vérifier la disponibilité des fonds sur le compte
-Ouvrir un ordre d'achat

De même, si la condition 2 est remplie, alors
-Vérifier s'il y a des ordres d'achat ouverts.
s'il y en a, fermez-les
vérifier s'il y a des ordres BUY ouverts - s'il y en a, les fermer
-ouvrir un ordre de VENTE
+ analyse des erreurs (pas l'essentiel, mais c'est possible)

Qu'est-ce que cela a à voir avec HOSTAGE ? :))))

Toutes les vérifications nécessaires ont déjà été effectuées et un signal commercial s'est formé ou non.

 
demlin:

Bonjour à tous !

Grâce à l'aide inestimable des experts de cette branche (en particulier Roman) j'ai réussi à faire un Expert Advisor simple, qui a montré + sur le testeur. Question : Comment déterminer s'il peut être placé pour un commerce réel ? Y a-t-il des critères ?


Oui, quels sont les critères, vous travaillez sur les choses "de base" (affûtage pour le réel - le contrôle de la déconnexion et le passage à une ligne supplémentaire que je ne considère pas), sous la forme d'un traitement compétent des erreurs possibles avec l'adoption de l'expert des décisions organisationnelles appropriées sur le travail ultérieur, puis la démo est obligatoire, puis le micro-réel .... Si vous êtes satisfaits des résultats - "allez-y à fond" ... :-)) Pour commencer, prenez la gestion des erreurs des EAs à partir du tutoriel, avant de placer des ordres n'oubliez pas de faire les vérifications nécessaires des exigences et des limites des opérations de trading, dans la recherche quelque chose comme : la gestion des erreurs site:mql4.com, la préparation des EAs pour le site réel:mql4.com, j'ai (part :-R) un expert qui fait de telles fi ndings comme cela :

// После старта
if (!IsTradeAllowed() || IsTradeContextBusy() || !IsConnected()) return; // если торговля невозможна, то выходим

Vérification de la sélection de l'ordre pour l'utiliser

                if (ticket>0)                                               // Если позиция открылась
                    {
                       while(OrderSelect(ticket,SELECT_BY_TICKET)==false) Sleep(1000);     // Если ордер выбран
                         double OpenPrice=OrderOpenPrice();
                         ...  
                           

Au début

color ColorBuy = Blue, ColorSell = Red;
bool UseSound = true;
string alert.wav;
color clr, ClrClose = Gray;
int Level_new; 
double price;
bool result, Buy_signal=false, Sell_signal=false;
int  orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots;                       // вспомогательная переменная для расчета нового размера лота 
double Lots_New;                   // Количество лотов для новых ордеров
int ticket;                        // Номер ордера
double orderLots;                  // Lots   
double orderProfit;                // Profit
double Price;                      // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double  TP;                        // Значение TakeProfit ордера
static datetime prevtime = 0;       // по ценам открытия

int init(){
    IsExpertStopped = false;
    if (!IsTradeAllowed())
       {
         Comment("Необходимо разрешить советнику торговать");
         IsExpertStopped = true;
         return (0);
       }
      
    if (!IsTesting())
       {
         if (IsExpertEnabled())  Comment("Советник запустится следующим тиком");       
           else  Comment("Отжата кнопка \"Разрешить запуск советников\"");
      
       }
    ...
   
   return (0);
}

C'est tout, IMHO, pour commencer ; nous pourrions continuer encore et encore...

Dans tous les cas, le contrôle du "Manager" est nécessaire... :-R Afin de ne pas être atrocement douloureux pour les dépôts perdus...

 

MaxZ:


La question était la suivante :

Qu'est-ce que cela a à voir avec STOCHASTAGE ? :))))

Toutes les vérifications nécessaires ont été effectuées et le signal de trading a été formé ou non.


Il y avait une question directe :

"Tout se passe sur la paire de devises actuelle.
int start()
{
double M_0, M_1 ; // Valeur MAIN sur les barres 0 et 1
S_0, S_1 ; // Valeur du SIGNAL sur la barre 0 et 1
//--------------------------------------------------------------------
// Appelez la fonction pour l'affichage technique.
M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 barre
M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);// 1 barre
S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 barre
S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1 barre
//--------------------------------------------------------------------

if( M_1 < S_1 && M_0 >= S_0 ) // CONDITION 1 : le vert croise le rouge par le bas

if( M_1 > S_1 && M_0 <= S_0 ) // CONDITION 2 : le vert croise le rouge du haut

//--------------------------------------------------------------------
return ; //Exit de start()
}"

En gros, tout ce à quoi, IMHO, l'auteur a été référé, il le découvrira... :-Р

 

Roman.:


Au début.

...
int init(){
    IsExpertStopped = false;
    if (!IsTradeAllowed())
       {
         Comment("Необходимо разрешить советнику торговать");
         IsExpertStopped = true;
         return (0);
       }
...

Quel est l'objectif de la variable IsExpertStopped ? Et il s'avère que chaque tick dans le journal affiche le message " Expert Advisor must be allowed to trade"...

 
MaxZ:

Quel est l'objectif de la variable IsExpertStopped ? Et il s'avère qu'à chaque tick dans le journal il y aura un message "Expert Advisor must be allowed to trade"...

C'est ce que je fais :


F1 press on
IsTradeAllowed()

Vous allez découvrir... :-Р

Plus précisément "

Si EA est autorisé à trader et que le fil est libre", alors trade, sinon IsExpertStopped = EA arrêté, en attente de la permission de trader...

 
Roman.:

F1 press on

découvrez... :-Р

A savoir "

si l'EA est autorisé à trader et que le thread pour l'exécution de la transaction est libre", alors trade, sinon IsExpertStopped = EA arrêté, attendant la permission de trader...

Je l'ai... Je suis totalement distrait aujourd'hui. Je vois init() et je pense à start() ! :)))))

 
MaxZ:

C'est clair. Mais la relation entre 2 (la moyenne entre les deux volumes) et ce qui est calculé dans la variable UP12 n'est pas claire. Après tout, les dimensions des deux sont différentes. Les temps et le prix aux dénominateurs. Après tout, à l'école, on nous a appris que les mètres et les kilogrammes ne s'additionnent pas du tout ! :))))


C'est vrai, ce n'est pas vrai ! :)))) C'est une chose d'avoir des formules sous forme de fractions, c'en est une autre de tout mettre sur une ligne et de ne pas comprendre comment... C'est de l'inattention, pas de la précipitation...

J'ai aussi mal optimisé le code. Là encore, il s'agit d'une erreur de mathématiques. J'ai oublié d'utiliser des parenthèses.


MaxZ, dépêchez-vous, oh dépêchez-vous :))) avec des conclusions !

Je n'additionne pas les kilomètres et les kilogrammes. Un exemple concret. L'eurodollar d'aujourd'hui, 5 minutes. Je viens de jeter un coup d'œil au graphique où il y a 2 bougies ascendantes dans une rangée.

vback1=703, dVolume=696. (vback1+dVolume)/2=699,5.

Sur les mêmes chandeliers (Close[i]-Open[i+1] )*1000=(1.42911-1.42549)*1000=3.62

(vback1+dVolume)/3.62=386.5

Total : 696+699,5-386,5=1009. C'est ce qui devrait être dessiné. Et ce qui est exactement 1009 est montré par l'indicateur à cet endroit. Et ainsi de suite.

Une autre chose est que j'ai moi-même calculé cet exemple ici et découvert que selon la formule du code, ce que j'ai décrit dans le post précédent ne se produit pas. En fait, il s'agissait d'une idéologie différente, une sorte d'autorégulation. Tant que les valeurs négatives du paramètre vrealUP12 ne dépassent pas la somme de dVolume+vteor12, il y aura un ajout au dernier volume. Ou bien des paramètres supplémentaires doivent être saisis pour le calcul de ExtVolumesBuffer[i].

Et dans la ligne

double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);

Je viens de le remettre à

double vrealUP12=(dVolume+vback1)/UP12;

afin de ne pas s'allonger.

 
Code:


MaxZ, dépêchez-vous, oh dépêchez-vous :))) avec vos conclusions !

Je n'ai pas additionné les kilomètres et les kilogrammes. Un exemple concret. L'eurodollar d'aujourd'hui, 5 minutes. Je viens de jeter un coup d'œil au graphique où il y a 2 bougies ascendantes dans une rangée.

Merde... Vous vous additionnez, et comment ! :))

La variable vteor12 a la dimension de Volumes (c'est-à-dire Nos mètres).

 vteor12=(dVolume+vback1)/2;

La variable UP12 a la dimension de Pips pour une certaine paire de devises.

UP12=(Close[i]-Open[i+1])*1000

La variable vrealUP12 est dimensionnée au rapport des Volumes aux Points (c'est-à-dire nos kilogrammes).

vrealUP12=(dVolume+vback1)/UP12;

Et vous finissez par calculer votre caractéristique, qui est la somme des mètres et des kilogrammes, ce dont il s'agit ! ;D

ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;


A moins que 2 ne soit pas les 20 points que le Prix par deux barres devrait passer en théorie ! :)) Mais c'est déjà un peu n'importe quoi...


Code:


Et dans la ligne

double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);

Je l'ai remis à

double vrealUP12=(dVolume+vback1)/UP12;

afin de ne pas l'allonger.

L'allongement est parfois utile. Il permet d'économiser les ressources informatiques ! :))) Pourquoi avez-vous besoin de cette variable supplémentaire ?

 
MaxZ:

Oh, mec... Tu l'es ! :))

La variable vteor12 a la dimension de Volumes (c'est-à-dire Nos mètres).

La variable UP12 a la dimension de Prix.

La variable vrealUP12 est dimensionnée en Volumes et Prix (il s'agit de Nos kilogrammes).

Et à la fin, vous calculez votre caractéristique, qui est la somme des mètres et des kilogrammes, ce qui est l'essentiel ! ;D


OK, essayons une autre façon de voir les choses.

vteor12 peut être écrit comme (dVolume+vback1)/k1 (facteur 1)

vrealUP12 peut être écrit comme (dVolume+vback1)/k2 (facteur 2)

Comme j'ai essayé de décrire l'idéologie de l'indicateur, elle consiste à comparer certains niveaux théoriques et réels. Pour obtenir ces niveaux, je compare (c'est-à-dire je divise) la même valeur (dVolume+vback1) avec une valeur théorique (k1) et une valeur réelle (k2). Il est clair que k1 je suis en train d'inventer, pour mettre les choses dans leur nom propre. Ou, si vous voulez, faire une supposition. Maintenant, il faut le comparer à quelque chose. Rien n'est plus objectif et vrai que le graphique lui-même dans ce cas. Je prends donc les différences d'ouverture et de fermeture, en les considérant comme la ligne de fond d'une période donnée. Et la seule tâche ici est de l'amener au même chiffre, c'est pourquoi il est multiplié par 1000.

Essayez de calculer plusieurs variantes de chandeliers voisins sur une calculatrice et vous serez peut-être surpris par la variété des résultats selon cette formule très simple.

Et en termes de logique scolaire, vous avez raison. J'ajoute Volume + Volume/Prix, tu ne peux pas faire ça à l'école. :))