[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 18

 
Figar0 >> :

>> Mettez tout le code là, il n'y a pas encore d'odeur de bouchon ici...

Il ne s'agit pas de stoppers, mais de fermer une position dès que le prix touche la MA.

 
Novice писал(а) >>

Il ne s'agit pas de stoplots, il s'agit de fermer la position dès que le prix touche la MA

Qu'il en soit ainsi, c'est vous qui avez écrit sur les arrêts...). Mais je n'arrive pas à comprendre pourquoi cela ne fonctionne pas sans le code. L'article ci-dessus n'est pas très informatif.

 
Figar0 >> :

Soit, c'est vous qui avez écrit sur les bouchons...). Tout de même, sans le code, il est impossible de comprendre pourquoi ça ne marche pas, la pièce postée n'est absolument pas informative.

J'ai dû m'exprimer très mal, je m'excuse, je voulais dire que la MA elle-même doit servir de stop-loss.

>> :

... ... la position a été fermée dès que le prix a touché le niveau MA.


Et le code est extrêmement primitif :


         Ticket=OrderTicket();                 
         Tip   =OrderType();                   
         Lot   =OrderLots();                   

    MA2C=iMA(NULL,0, Period_MA2,0,MODE_SMA,PRICE_CLOSE,0); //Есть две MA с разным периодом.
    MA3C=iMA(NULL,0, Period_MA3,0,MODE_SMA,PRICE_CLOSE,0); //И вот с такими параметрами.
     
     //Так же есть условия, при которых по идее должны срабатывать 
     // функции закрытия ордеров.
     
     RefreshRates();                  
    if ( Tip==0 && Bid== MA2C)        //Обозначение типа ордера и условия закрытия
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C)
     {
      CloseSell=true;                               // Закрыть Sell
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Закрыть Sell
     }

        // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if ( Tip==0 && CloseBuy==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Bid,3,Blue);      // Закрытие Buy
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
        if ( Tip==1 && CloseSell==true)                // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert("Попытка закрыть Sell ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Ask,3,Red);      // Закрытие Sell
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Sell ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

Je pense déjà que 4 conditions peuvent être changées en 2


     RefreshRates();
    if ( Tip==0 && Bid== MA2C || Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C || Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Критерий закр. Sell
     }
 
     RefreshRates();
    if ( Tip==0 && (Bid== MA2C  || Bid== MA3C))
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && (Ask== MA2C ||  Ask== MA3C))
     {
      CloseSell=true;                               // Критерий закр. Sell
     }

Ensuite c'est comme ça) De toute façon, c'est une pièce délirante, les wagons sont construits à des prix Bid, et les comparer comme ça.... Je ne sais pas.

Quelque chose dans votre code, OrderSelect ne voient pas ?

 

C'est standard, ça vient d'un manuel :


Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect( i-1, SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!= Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if ( Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }

//И далее как выше...
Il est important pour moi de comprendre si cela est possible en principe, car lors du test en mode visualisation, les ordres ne se ferment pas sur la MA.
 
Novice писал(а) >>

Je veux savoir s'il est possible de le faire en principe car lors du test en mode visualisation, les ordres ne sont pas fermés sur MA

En principe, c'est possible. N'avez-vous qu'une seule commande possible dans votre système ?

Essayez de normaliser les prix Bid/Ask et les valeurs MA pour l'égalité, c'est nécessaire...

Pourquoi n'utilisez-vous pas votre conseiller expert ? Je l'aurais corrigé il y a longtemps.

 
Figar0 >> :

En principe, c'est possible. N'avez-vous qu'une seule commande possible dans votre système ?

Essayez de normaliser les prix Bid/Ask et les valeurs MA pour l'égalité, c'est nécessaire...

Pourquoi n'utilisez-vous pas votre conseiller expert ? Je l'aurais corrigé depuis longtemps.

Après ça, ma tête a commencé à tourner...

Non) A un graal comme à une autre galaxie, seulement des tentatives pour réaliser et améliorer le TC.


Je n'ai pas réussi à mettre tout le code dans le message, alors je joins à ce message

Dossiers :
g.ei.vn.gl..mq4  12 kb
 
Novice писал(а) >>

Après ça, ma tête a commencé à tourner...

Non) Le Graal est comme une autre galaxie, juste une tentative de mise en œuvre et d'amélioration du TC.

Je n'ai pas réussi à mettre tout le code dans ce post, donc je le colle ici.

Mais en principe, cela fonctionne d'une certaine manière :

La seule chose que j'ai supprimée est l'augmentation du lot. Je croyais que vous aviez dit que les commandes n'étaient pas fermées ?

 
Ils ne ferment pas sur MA, exactement quand le prix les touche. Sur MA2C et MA3C. A propos du décousu, oui, je ne l'ai pas encore terminé.


Alors comment... ?

Figar0 >> :

...normaliser les prix Bid/Ask et les valeurs MA lors des comparaisons pour l'égalité...

Je ne comprends pas exactement comment normaliser... NormalizeDouble(Ask, Digits) ?

 

Le problème est d'actualité, je me demande encore comment faire pour que les ordres se ferment dès que le prix de la MA est atteint.


Après la normalisation, une erreur est apparue pendant la compilation pour une raison quelconque, et dans la partie du code où il n'a pas été touché du tout.

Raison: