Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 869

 
Top2n:

Je suis désolé, c'est dommage de ressasser la même chose cent fois.

Ça fait presque un mois que je fixe la porte comme un mouton. Je ne comprends rien.

La tâche consiste à calculer une moyenne mobile inférieure avec une moyenne mobile de 13,

c'est-à-dire de calculer une période de 12 sur la base de 13.

Facile à calculer : Y(N)=1/N*(Y(N+1)*(N+1)-X[N]), où Y(i) - valeur de MA(i) sur la barre zéro, X[j] - valeur du prix sur la j-ème barre ; seulement ceci est un non-sens informatique, alors que cela ne permet pas de regarder dans le futur de toute façon.
 

Bonjour, est-ce que l'un de vos estimés gourous pourrait vérifier le démarrage de ma première EA ? Est-il possible de passer à autre chose ? J'ai peut-être manqué quelque chose ? Je vous serais très reconnaissant de me donner des précisions. J'ai vu quelque part sur le forum comment ouvrir une seule position, mais je ne l'ai pas copié et maintenant je ne le trouve plus. Aidez-nous, s'il vous plaît.

Merci !

// Version d'essai d'Expert Advisor

//--------------------------------------------------------------------

//------Вводные данные:-----------------------------------------------------------

entrée double Lots = 0.1 ; //Lot

input int MovingPeriod =5 ; // МА période de calcul

input int MovingShift =0 ; // décalage MA

input int InpBandsPeriod=10 ; // période des bandes de Bollinger

input int InpBandsShift=0 ; // décalage des bandes de Bollinger

input double InpBandsDeviations=2.0 ; // écart des bandes de Bollinger

input int K_Period=30 ; // %K période de la stochastique

input int D_Period=10 ; // %D Période stochastique

input int Slowdawn =8 ; // Ralentissement stochastique

couleur d'entrée clMainStoch =Yellow ; // couleur de la ligne stochastique principale

couleur d'entrée clSignalStoch =Red ; // couleur de la ligne du signal stochastique

// -----Declarez les variables globales:------------------------------------------

double MA_0, MA_1, MA_2 ; // Valeur MA sur les barres 0, 1 et 2

double MB_0, MB_1, MB_2 ; // Valeur de la moyenne de Bollinger sur 0, 1 et 2 barres

double ExtUpperBuffer[] ; // valeur de la ligne de Bollinger supérieure

double ExtLowerBuffer[] ; // Valeur de la ligne de Bollinger inférieure

double Delta_0, Delta_1 ; // différence entre les valeurs de la Bollinger supérieure et inférieure ...

// ...Lignes de Bollinger sur les barres 0 et 1

double Yellow_0, Yellow_1, Yellow_2 ; // Valeur MAIN sur les barres 0, 1 et 2

double Red_0, Red_1, Red_2 ; // SIGNAL de valeur sur les barres 0, 1 et 2

//-------Поехали!----------------------------------------------------------------

int start() //Démarrage d'une fonction spéciale

{

//appel de fonction de l'indicateur MA

MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0) ;

MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1) ;

MA_2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2) ;

//réaction à la fonction des bandes de Bollinger

MB_0=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,0) ;

MB_1=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,1) ;

MB_2=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,2) ;

Delta_0=iBandes(ExtUpperBuffer[0]-ExtLowerBuffer[0]) ;

Delta_1=iBandes(ExtUpperBuffer[1]-ExtLowerBuffer[1]) ;

//Appel de fonction stochastique

Yellow_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,0) ;

Yellow_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,1) ;

Yellow_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,2) ;

Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0) ;

Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1) ;

Red_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,2) ;

//-------Ситуации по Стохастику:-----------------------------------------------------

//Le marché est suracheté

double MOB()=(Yellow_0>=80 && Red_0>=80) ; //La variable locale

//Le marché est survendu.

double MOS()=(Yellow_0<=20 && Red_0<=20) ; //La variable locale

//Le marché est normal.

double MN()=(20<Jaune_0<80 && 20<Rouge_0<80) ; //Variable locale

//Situation critique

double MC1()=(20<Jaune_0<80 && Rouge_0<=20) ; //Variable locale

double MC2()=(20<Jaune_0<80 && Rouge_0>=80) ; //Variable locale

double MC3()=(20<Red_0<80 && Yellow_0<=20) ; //La variable locale

double MC4()=(20<Red_0<80 && Yellow_0>=80) ; //La variable locale

//-------Example(my)order to open position-----------------------------------------------------


if (Delta_0 > Delta_1 && MOB()==true) //The market is overbought but delta is expanding

{ if (MB_2 > MB_1 && MB_1 < MB_0) /Pause de Bollinger inférieure

OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point);//ouverture de l'ordre d'achat

Alert("GetLastError()) ; //Message d'une erreur

Alert("Ouvrir position BAY avec lots("Lots"),prix("Ask").") ; //Message d'achat

 

En outre, les positions BAY (ainsi que Sell) peuvent être ouvertes dans différentes conditions, et selon les conditions dans lesquelles la position a été ouverte (par exemple BAY), il y aura différentes conditions de clôture. (par exemple, BAY), les conditions de clôture seront différentes.

Comment traduire cela en MKL ?

 
rapid_minus:

En outre, les positions BAY (ainsi que Sell) peuvent être ouvertes dans différentes conditions, et selon les conditions dans lesquelles la position a été ouverte (par exemple BAY), il y aura différentes conditions de clôture. (par exemple, BAY), les conditions de clôture seront différentes.

Comment traduire cela en MKL ?

Nous sélectionnons l'ordre dans la boucle. S'il s'agit d'un Achat, et que les autres données (symbole, magik, etc.) répondent au critère selon lequel il devrait être fermé aux "conditions de fermeture personnalisées", alors nous le fermerons si les "conditions de fermeture personnalisées" existent.
 
artmedia70:
Nous sélectionnons l'ordre dans la boucle. Si c'est un Buy et que toutes les autres données (symbole, magicien, peu importe) répondent au critère de devoir le clôturer aux "conditions de clôture appropriées", alors nous le clôturons s'il y a des "conditions de clôture appropriées".

C'est un peu vague pour moi, mais après avoir creusé un peu, je pense que je vais comprendre. Merci beaucoup de ne pas tourner le dos et de ne pas donner des leçons du haut de votre savoir, comme certains camarades du pays soviétique.

J'ai trouvé comment fermer :

//-------Exemple(mine) d'un ordre d'ouverture de position avec fermeture obligatoire (par ticket)-----------------------------------------------------

//La variable locale qui ouvre un ordre BAY (au lieu de la ligne 63)

int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point))

//-------Alors la fermeture pour cette commande particulière pourrait être la suivante:-----------------------------------------------------

if (Ticket_1()==true) //si la commande #1 a été ouverte, alors...

{ if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //Le jaune est supérieur au rouge, contraction(condition)

{ if (MA_2 < MA_1 && MA_1 > MA_0);} //Rouge au-dessus de celui du milieu (condition)

else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Jaune au-dessus de rouge, expansion(condition)

{ if (MB_2 < MB_1 && MB_1 > MB_0);} //Bris de Bollinger supérieur (condition)

bool Ans=OrderClose(Ticket,Lot,Bid,0) ; //...fermer l'ordre (lockvariable)

Alert("Tentative de clôture de l'ordre avec Bid("Lots"),price("Ask"). En attente d'une réponse...") ;

if (Ans==true) // Cela a marché :)

{

Alert ("Ordre BAY fermé par lot("Lots"),Prix de clôture("Bid") ;

break ; // Sortie de la boucle de fermeture de position

}


}

S'il vous plaît donner une analyse, bien sur le poste précédent aussi. Désolé d'être têtu, mais tu vois - tu es le seul qui répond... Merci !

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия (по тикету)----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ(вместо строки 63)
   int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (Ticket_1()==true)                              //Если был открыт ордер №1, то...
     { if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //Желтая выше красной, сужение(условие)
        { if (MA_2 < MA_1 && MA_1 > MA_0);}                      //Верхний перелом Средней (условие)
       else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Желтая выше красной, расширение(альтерн.условие)
         { if (MB_2 < MB_1 && MB_1 > MB_0);}                      //Верхний перелом Боллинджера (условие)
       
       bool Ans=OrderClose(Ticket,Lot,Bid,0);          //...закрытие ордера (лок.переменная)                                               
   Alert("Попытка закрыть ордер БАЙ лотом("Lots"),цена("Ask"). Ожидание ответа..");
   if (Ans==true)                                     // Получилось :)
        {
         Alert ("Закрыт ордер БАЙ лотом("Lots"),цена закрытия("Bid");
         break;                                       // Выход из цикла закрытия позиции
        }

     }
C'est tellement plus facile à lire. Désolé.
 
rapid_minus:

C'est un peu vague pour moi, mais après avoir creusé un peu, je pense que je vais comprendre. Merci beaucoup de ne pas tourner le dos et de ne pas donner des leçons du haut de votre savoir, comme certains camarades du pays soviétique.

J'ai pensé à le fermer de cette façon :

...

Veuillez donner une analyse, et sur le poste précédent aussi. Désolé d'insister, mais vous voyez, vous êtes le seul à répondre... Merci !

Eh bien, c'est un peu flou, n'est-ce pas ?

1. vous devez déterminer le fait de l'occurrence de la condition pour clôturer l'ordre d'achat

2. Dans le cycle, vous passez en revue toutes les positions ouvertes et, lorsque vous trouvez l'ordre d'achat requis, vous le fermez.

C'est un exemple de cycle :

void ClosePositions(string symbol, int type, int magic) {
   for(int i=OrdersTotal()-1; i>=0; i--) {      // цикл по открытым ордерам
      if(OrderSelect(i,SELECT_BY_POS)) {        // выбираем ордер по индексу
         if(OrderMagicNumber()!=magic) continue;// если магик не искомый - ищем дальше
         if(OrderSymbol()!=symbol)     continue;// если символ не тот - ищем дальше
         if(OrderType()!=type)         continue;// если тип ордера не тот - ищем дальше
         // здесь, если ордер выбран, то он соответствует нужным критериям,
         // вызов функции закрытия выбранного ордера по тикету
         }
      }   
   }

Par exemple, pour clôturer l'ordre d'achat sur le symbole actuel (sur le graphique où le conseiller expert est exécuté) et avec un nombre magique de 100500 (par exemple), vous devez appeler la fonction comme suit

ClosePositions(Symbol(),OP_BUY,100500);

Vous n'avez pas besoin d'écrire le nombre 100500, généralement le nombre magique est déjà défini dans l'EA dans une variable, par exemple int Magic = 100500 ; Vous devez donc écrire Magic au lieu de 100500.

Je n'ai rien écrit dans la boucle où la position sélectionnée doit être fermée, car elle doit appeler la fonction pour fermer l'ordre selon le ticket. Il s'agit généralement d'un appel d'une fonction complète avec des codes de retour du serveur commercial traité. Vous pouvez y écrire une simple commande pour fermer l'ordre sélectionné OrderClose() pour vérifier ;

 
rapid_minus:
C'est beaucoup plus facile à lire de cette façon. Désolé.

Il est également possible de modifier un ancien message, afin de ne pas créer de doublons ;)

 
evillive:
Il est toujours possible de modifier un ancien message pour éviter les doublons ;)
J'ai essayé, mais le CRS ne le met plus.
 
artmedia70:

C'est un peu brumeux.

1) Déterminer le fait que la condition de clôture de l'ordre d'achat s'est produite.

2. Dans la boucle, vous passez en revue toutes les positions ouvertes et, lorsque vous trouvez l'ordre d'achat requis, vous le fermez.

C'est un exemple de cycle :

Par exemple, pour clôturer l'ordre d'achat sur le symbole actuel (sur le graphique où le conseiller expert est exécuté) et avec un nombre magique de 100500 (par exemple), vous devez appeler la fonction comme suit

Vous n'avez pas besoin d'écrire le nombre 100500, généralement le nombre magique est déjà défini dans l'EA dans une variable, par exemple int Magic = 100500 ; Vous devez donc écrire Magic au lieu de 100500.

Je n'ai rien écrit dans la boucle où la position sélectionnée doit être fermée, car elle doit appeler la fonction pour fermer l'ordre selon le ticket. Il s'agit généralement d'un appel d'une fonction complète avec des codes de retour du serveur commercial traité. Vous pouvez y écrire une simple commande pour fermer l'ordre sélectionné OrderClose() pour vérifier ;


Merci. Mais d'après ce que j'ai compris, le magik est attribué automatiquement lors de l'ouverture d'une commande. Je ne peux donc pas déterminer dans quelles conditions l'ordre est ouvert et je ne sais donc pas dans quelles conditions il doit être fermé.