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

 
lottamer:

Regardez,

Si je ramène tout maintenant, c'est-à-dire que je supprime les paramètres externes STOP et TAKE et que j'écris des chiffres à l'intérieur de la fonction à leur place, alors l'EA a été exécuté semaine après semaine pendant 10 semaines et montre des résultats clairs.

Et si je modifie manuellement les paramètres d'arrêt et d'enlèvement, tout fonctionnera et donnera des résultats légèrement différents (bien sûr).

Et maintenant, pourquoi, lorsque je prends ces paramètres en dehors du modificateur - l'optimiseur les considère comme insignifiants ?

C'est exactement ce que j'essaie de vous dire - que le problème se situe très probablement ailleurs, et non dans cette fonction. Donc vous avez quelque chose d'autre de mélangé. Peut-être que ces SL et TP sont appliqués à d'autres endroits qui se chevauchent ou autre chose. Nous ne pouvons que deviner. - C'est pourquoi vous devez examiner l'ensemble du code. Et personne ne peut vous aider aveuglément. - Il n'y a pas de sorciers ici.

Vous voyez, vous posez des questions mais vous ne donnez pas toutes les informations nécessaires pour en découvrir la raison (en cachant raisonnablement votre savoir-faire). - Comme dans l'exemple avec la fiche. - Mais comment pouvez-vous aider dans ce cas ? - La réponse est que vous ne pouvez pas. Toute l'aide est inutile. Et cela demande aussi beaucoup d'énergie.

 
Chiripaha:

Eh bien, si ça marche, et encore plus si c'est à 100%, alors il n'y a aucun problème. Alors pourquoi y chercher une erreur ? - Le problème n'est donc pas là ! - Si vous cherchez une erreur, cela signifie que vous n'êtes pas sûr à 100%. Le problème n'est donc pas dans le code mais dans vos critères d'évaluation, car ils vous embrouillent aussi. (Tu as commencé : ))) Je ne fais qu'y ajouter de l'huile...)

Ce qui est présenté ici - je ne sais même pas comment l'appeler ... Probablement - une action unique gonflée à la taille d'une fonction. Dans la plupart des programmes, ce type d'application n'est pas optimal - la modification d'un bloc va avec autre chose. - Bien que. les conditions d'application puissent être différentes. Mais ce que je veux dire, c'est qu'il n'y a rien à optimiser ici... Comme il ne s'agit que d'une action.

J'y regarde, parce que nous l'avons modifié UNIQUEMENT et parce que c'est là que se trouvent les paramètres optimisables.

Comment se fait-il qu'il n'y ait rien à optimiser ? Les tailles des arrêts et des prises sont optimisées !

 
Chiripaha:

C'est exactement ce que j'essaie de vous dire - que le problème est probablement ailleurs, pas dans cette fonction. Vous avez donc une autre confusion. Peut-être que ces SL et TP sont appliqués à d'autres endroits qui se chevauchent en quelque sorte ou autre chose... Nous ne pouvons que deviner. - C'est pourquoi vous devez examiner l'ensemble du code. Et personne ne peut vous aider aveuglément. - Il n'y a pas de sorciers.

Vous voyez, vous posez des questions et vous laissez de côté certaines des informations nécessaires pour identifier la cause (en cachant judicieusement votre savoir-faire). - Comme dans l'exemple avec les inludes. - Mais comment pouvez-vous aider dans ce cas ? - La réponse est que vous ne pouvez pas. Toute l'aide est inutile. Et cela demande aussi beaucoup d'énergie.

Je comprends...

nous devons faire une pause... et réfléchir...

regarder....

et je pense que je sais où...

 
lottamer:

J'y regarde, parce que nous l'avons modifié UNIQUEMENT et parce que c'est là que se trouvent les paramètres optimisables.

Comment se fait-il qu'il n'y ait rien à optimiser ? Les tailles des arrêts et des prises sont optimisées !

: )))))) Pour quoi sont-ils optimisés ? la modification de la commande ? - Ce n'est pas ce que tu viens de dire.

Ils doivent être optimisés par rapport au programme, à ses conditions - que vous cachez de manière fiable. Et vous ne pouvez pas l'optimiser par rapport à une seule action.

Dans ce cas, le développeur doit simplement décider de ces points par lui-même. On passe tous par là, crois-moi. : )) Moi aussi et d'autres collègues. Vous ne pouvez pas demander de l'aide et vous cacher. Ensuite, vous devez révéler - en l'occurrence le rendre public du tout, puisque le forum est public - vos cartes.
 
Chiripaha:

: )))))) En quoi sont-ils optimisés ? En modification d'ordre ? - Ce n'est pas ce que tu viens de dire.

Ils doivent être optimisés par rapport au programme, à ses conditions - que vous cachez de manière fiable. Mais vous ne pouvez pas l'optimiser par rapport à une seule action.

Dans ce cas, le développeur doit simplement décider de ces points par lui-même. On passe tous par là, crois-moi. : )) Moi aussi et d'autres collègues. Vous ne pouvez pas demander de l'aide et la cacher. Ensuite, vous devez divulguer - dans ce cas, le rendre public du tout, puisque le forum est public - vos cartes.

Je vais maintenant préparer tout le code et montrer.........
 

Voici le code :

Paire EURUSD

//+------------------------------------------------------------------+
//|                                                           33.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <WinUser32.mqh>
#include <b-Positions.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

extern  int  STOP = 100; 
extern  int  TAKE = 200;

double  Ma_1, Ma_2,  m2, m3; // m2 и m3 - это маркеры



//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
Ma_1=iMA(NULL,PERIOD_M15,20, 0,MODE_SMA,PRICE_CLOSE,1) ;

Ma_2=iMA(NULL,PERIOD_M15,100,0,MODE_SMA,PRICE_CLOSE,1) ;





//=============================BUY_CONDITIONS=============================================
    

if (Ma_1>Ma_2 && m2==0)     {My_close();  My_buy ();  My_modify();  m2=1;   }  // закрыть если висят открытые позы   
                                                                                                   // и открыть новую
//=============================SELL_CONDITIONS=============================================
 
if (Ma_1<Ma_2 && m3==0)     {My_close();  My_sell ();  My_modify();  m3=1;  }    
 
//======================================

if  ( OrdersTotal()==0 && (m2==1 || m3==1)) {m2=0; m3=0;}  // обнуляет маркеры при закрытии позиций,
                                                           // что дает возможность открывать снова
//==============переход в безубыток ========================
   
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
   
if  (OrderProfit()>0.5)  {My_modify_close_zero ();}


return(0);
  }

//============================функция  ПРОДАТЬ==============================================

int My_sell()
{
    OrderSend (Symbol( ), OP_SELL,  0.01 ,Bid, 0, 0, 0, NULL, 0, 0, CLR_NONE);

}
return;

///==================================КУПИТЬ==========================================
int My_buy ()
{
     OrderSend (Symbol( ), OP_BUY, 0.01 ,Ask, 0, 0, 0, NULL, 0, 0, CLR_NONE);
}
return;


//+---------------------МОДИФИЦИРОВАТЬ сделку сразу по открытии---------------------------------------------+


int My_modify()
 {
   bool   result;
   double take_profit,stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice()-STOP*point;
               else            stop_loss=OrderOpenPrice()+STOP*point;
               
                if(cmd==OP_BUY) take_profit=OrderOpenPrice()+TAKE*point;
                           else take_profit=OrderOpenPrice()-TAKE*point;
               
               
               result=OrderModify(OrderTicket(),0,stop_loss, take_profit,0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//            break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }

   return(0);
  }
  
  
//==============================выставить стопы в безубыток============================================================
int My_modify_close_zero ()
{
   bool   result;
   double stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice();
               else            stop_loss=OrderOpenPrice();
               
               result=OrderModify(OrderTicket(),OrderOpenPrice(),stop_loss,OrderTakeProfit(),0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//             break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }
//----
   return(0);
  }

  
//=================ЗАКРЫТЬ СДЕЛКУ=======================================================
int My_close()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
 
lottamer:

Voici le code :

Paire EURUSD

b-Positions.mqh le joindre - sinon vous ne pourrez pas l'exécuter - vous ne verrez pas comment il fonctionne.
 
Chiripaha:
b-Positions.mqh attacher - sinon vous ne pourrez pas l'exécuter - vous ne pourrez pas le voir fonctionner.

Dossiers :
b-positions.mqh  90 kb
 
lottamer:
J'ai une question - pourquoi avez-vous besoin de ce fichier comme plug-in, si vous avez toutes les fonctions nécessaires dans le conseiller expert lui-même ? Vous avez l'intention de faire autre chose ?
 
Chiripaha:
J'ai une question - pourquoi avez-vous besoin de ce fichier comme plugin, si vous avez toutes les fonctions nécessaires dans le conseiller expert lui-même ? Vous avez l'intention de faire autre chose ?



c'est ... des atavismes ... je n'ai pas écrit le code à partir de zéro ... quelque chose était déjà là ... peut-être quelque chose que j'ai déjà essayé...

à gauche...

Je pourrais avoir besoin d'affiner quelque chose et avoir besoin d'une fonction utilisateur toute prête... Donc, il est suspendu et ne demande pas de nourriture... :))) pas d'erreurs