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

 
gordeef:

Je suis prudent avec les revirements et les corrections comme c'est le cas. Mais concernant l'épuisement de la tendance, je m'y intéresse également, je me suis promené sur le forum et j'ai regardé sur CodeBase, mais je n'ai rencontré aucun indice sur ce sujet. Il sera intéressant de lire vos résultats. J'ai une autre question, ils m'ont envoyé un EA qui contrôle mes pertes et mes profits, comme sur l'image cela devrait fonctionner, mais la question est, il a un profit de 15 points et je vois que le prix peut aller encore plus haut, si j'augmente le profit sur un ou un autre trade, cela peut casser les calculs généraux et le fonctionnement de l'EA ?
Je pense que la bonne réponse à cette question se trouve peut-être dans les entrailles de mon conseiller expert... Peut-être que l'un des camarades beaucoup plus expérimentés y répondra... Je pense que leur réponse sera plus valable du fait de leur expérience - je ne suis qu'un débutant... :)
 
artmedia70:

OK. Merci, Victor. Jusqu'à présent, cela fonctionne correctement. Jusqu'à présent, car je ne l'ai pas suivi depuis longtemps, mais je n'ai JAMAIS eu de sortie Trend Up pour moi auparavant. C'est maintenant :


Je savais qu'il y avait toujours un sorcier plus puissant pour un aspirant sorcier... :)

C'est une blague, bien sûr, mais... Victor, je ne veux pas me contenter de copier aveuglément la bonne solution, mais chercher et comprendre où se cache le chien, quelle est l'essence du problème et ce comportement incompréhensible du code pour moi ?


Problèmes de logique. Pas plus que ça. Essayez de dessiner des schémas de principe. Il aide
 

J'ai une autre question : au début, je faisais un nombre N de lignes, mais je me suis rendu compte que l'une d'entre elles était superflue et qu'il serait plus approprié de la mettre entre parenthèses sous forme de pourcentage numérique, alors je l'ai supprimée et mise à côté de celle où il y avait juste la place :

C'était comme ça au début :


Et c'est comme ça que ça se passe maintenant :


Je suis hanté par les échos d'événements passés... Lorsque l'EA est lancé pour la première fois, avant l'arrivée d'un nouveau tick, il affiche toujours ce qu'il était initialement... Bien que ce ne soit pas dans le code depuis longtemps. D'où viennent les fantômes ???

 
artmedia70:

Une autre question s'est posée : au début, je faisais plusieurs lignes, mais je me suis rendu compte que l'une d'entre elles était superflue et qu'il serait plus approprié de la mettre entre parenthèses sous forme de pourcentage numérique, alors je l'ai supprimée et mise à côté de celle où il y avait juste la place :

C'était comme ça au début :


Et c'est comme ça que ça se passe maintenant :


Je suis hanté par les échos d'événements passés... Lorsque l'EA est lancé pour la première fois, avant l'arrivée d'un nouveau tick, il affiche toujours ce qu'il était initialement... Bien que ce ne soit pas dans le code depuis longtemps. D'où viennent les fantômes ???





Vous devez regarder le code. Démontez la logique.
 
Vinin:

Problèmes logiques. Rien de plus. Essayez de dessiner des schémas de principe. Aide

:) :) Merci... Eh... J'ai déjà un tel tartan sur mon plancher... Mamma mia ! Il ne semble pas y avoir beaucoup de logique dans ces trois lignes. Il s'avère que lorsque vous vérifiez : si le 1er, alors faites-le, si vous ne faites pas le 1er, bien sûr le 2ème vient ensuite. Si le 2ème échoue, le 3ème suit...

Non... C'est comme ça : si c'est le 1er, alors c'est comme ça... Sinon, si le 2e, on fait so-c, sinon, si ce n'est pas le 1er et le 2e, on fait le 3e, et si ce n'est pas le 1er, pas le 2e et pas le 3e, alors on cherche des erreurs de logique....

Oh... Je suis moi-même complètement confus... Eh bien, Victor, votre addition se comporte correctement, et maintenant je vais essayer de comprendre pourquoi j'ai besoin d'un opérateur else supplémentaire qui semble se trouver à cet endroit où ce "otherwise" se produit de toute façon, après m'être creusé la tête...

Merci pour le conseil.

 
Vinin:

Vous devez regarder le code. Pour démêler la logique.

Il n'y a presque aucune logique - la simple sortie des lignes dans l'ordre l'une après l'autre...

/--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   ObjectCreate("Equ",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Equ",OBJPROP_XDISTANCE,x);
   ObjectSet("Equ",OBJPROP_YDISTANCE,y);
   ObjectSetText("Equ",    "Свободные средства",9,"Tahoma",Gold);
   
   ObjectCreate("EquVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("EquVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("EquVal",OBJPROP_YDISTANCE,y);
   ObjectSetText("EquVal",DoubleToStr(Equ_NEW,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Prof",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Prof",OBJPROP_XDISTANCE,x);
   ObjectSet("Prof",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Prof",   "Уровень фиксации прибыли (      %)",9,"Tahoma",Gold);
   
   ObjectCreate("ProfVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ProfVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ProfVal",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("ProfVal", DoubleToStr(Equ_OLD+EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------    
   ObjectCreate("Perc",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Perc",OBJPROP_XDISTANCE,x*18);
   ObjectSet("Perc",OBJPROP_YDISTANCE,y*2);
   ObjectSetText("Perc", DoubleToStr(PercentEquityForClose,1),9,"Tahoma",Yellow);
   
//--------------------------------------------------------------------   
   ObjectCreate("Tral",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Tral",OBJPROP_XDISTANCE,x);
   ObjectSet("Tral",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("Tral",   "Уровень включения трала",9,"Tahoma",Gold);
   
   ObjectCreate("TralVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TralVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TralVal",OBJPROP_YDISTANCE,y*3);
   ObjectSetText("TralVal", DoubleToStr(Equ_OLD-EquPerc,2),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("Wloss",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("Wloss",OBJPROP_XDISTANCE,x);
   ObjectSet("Wloss",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("Wloss",  "Порог выставления безубытка",9,"Tahoma",Gold);
   
   ObjectCreate("WlossVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossVal",OBJPROP_YDISTANCE,y*4);
   ObjectSetText("WlossVal", DoubleToStr(LevelProfit,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("WlossPP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPP",OBJPROP_XDISTANCE,x);
   ObjectSet("WlossPP",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPP","Размер безубытка в пунктах",9,"Tahoma",Gold);
   
   ObjectCreate("WlossPPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("WlossPPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("WlossPPVal",OBJPROP_YDISTANCE,y*5);
   ObjectSetText("WlossPPVal",DoubleToStr(LevelWLoss,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("ATR",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATR",OBJPROP_XDISTANCE,x);
   ObjectSet("ATR",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATR",    "Волатильность рынка",9,"Tahoma",Gold);
   
   ObjectCreate("ATRVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ATRVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("ATRVal",OBJPROP_YDISTANCE,y*6);
   ObjectSetText("ATRVal", DoubleToStr(VolATR,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("TP",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TP",OBJPROP_XDISTANCE,x);
   ObjectSet("TP",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TP",     "Размер Take Profit",9,"Tahoma",Gold);
   
   ObjectCreate("TPVal",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("TPVal",OBJPROP_XDISTANCE,x*23);
   ObjectSet("TPVal",OBJPROP_YDISTANCE,y*7);
   ObjectSetText("TPVal", DoubleToStr(TPatr,0),9,"Tahoma",Yellow);
//--------------------------------------------------------------------   
   ObjectCreate("trH4",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH4",OBJPROP_XDISTANCE,x);
   ObjectSet("trH4",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH4",OBJ_LABEL,Win_ind,0,0,0,0);
   ObjectSet("ArrowH4",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowH4",OBJPROP_YDISTANCE,y*9);

   if (trH4==1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",Lime);
         ObjectSetText("ArrowH4",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",Lime);
      }
   else if (trH4==-1)
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH4",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH4","Тренд H4",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH4",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH4",DoubleToStr(trH4,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trH1",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trH1",OBJPROP_YDISTANCE,y*9);
   
   ObjectCreate("ArrowH1",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowH1",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowH1",OBJPROP_YDISTANCE,y*9);
   
   if (trH1==1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",Lime);
         ObjectSetText("ArrowH1",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",Lime);
      }
   else if (trH1==-1)
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowH1",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trH1","Тренд H1",9,"Tahoma",LightGray);
         ObjectSetText("ArrowH1",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowH1",DoubleToStr(trH1,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM30",OBJPROP_XDISTANCE,x);
   ObjectSet("trM30",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM30",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM30",OBJPROP_XDISTANCE,x*8);
   ObjectSet("ArrowM30",OBJPROP_YDISTANCE,y*10);
   
   if (trM30==1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",Lime);
         ObjectSetText("ArrowM30",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",Lime);
      }
   else if (trM30==-1)
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM30",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM30","Тренд M30",9,"Tahoma",LightGray);
         ObjectSetText("ArrowM30",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM30",DoubleToStr(trM30,0),9,"Tahoma",LightGray);
      }
//--------------------------------------------------------------------   
   ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   else if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
//         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
/*
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }
*/
//--------------------------------------------------------------------   
   

//--------------------------------------------------------------------   
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }
//--------------------------------------------------------------- 9 --
 

Les gens, s'il vous plaît partager le prêt, le travail (pas glitchy) des modèles de conseiller expert, de sorte qu'il est seulement possible de changer la stratégie de négociation, avec la possibilité de fermer la position ouverte à l'opposé si nécessaire (inversion, mais de sorte que l'achat / vente dans la condition n'est pas à travers d'autres, mais avec la possibilité de prescrire séparément les conditions :

si condition d'achat
{
Opn_B=true ; // Ouvre le critère d'achat.
Cls_S=true ; // Ferme le critère de vente. Vendre
}
if condition to sell
{
Opn_S=true ; // Critère ouvert Vendre
Cls_B=true ; // Critère fermé Acheter Critère d'achat
} ), ou TP/SL pour fermer la position.

Je suis en train de perdre la tête, je me bats avec ça depuis un mois. Je ne peux pas déplacer les stratégies de trading d'Omega à MT, une sorte de tampons/ schmuffers, des tableaux farfelus et des blocs de comptabilité, l'ouverture/fermeture et la comptabilité des erreurs dans mon Expert Advisor.

Merci d'avance à tous ceux qui ont répondu.

 
Craft:

Les gens, s'il vous plaît partager les modèles prêts, de travail d'un EA, de sorte que vous pouvez seulement changer la stratégie de négociation, avec la possibilité de fermer une position ouverte sur le côté opposé (renversement), ou par TP / SL, si nécessaire.

Je tourne en rond avec la comptabilité des commandes, les blocs d'ouverture/fermeture et la comptabilité des erreurs.

La réponse est que je "transpire" dessus depuis longtemps - seulement si vous voulez tester des stratégies et les changer rapidement, la comptabilité des commandes doit être laissée de côté, ainsi que les erreurs doivent être mises sur l'étagère. Il suffit de copier ce qu'il a dans le manuel et de les laisser faire. Fonctionne uniquement avec Trade() et Criterion(), si vous suivez le tutoriel de Sergei Kovalev. Criterion() - pour trouver des points d'entrée pour vos stratégies, Trade() - pour ouvrir/fermer des positions. Il suffit de travailler avec eux et de les modifier pour tester les stratégies. Et ensuite, une fois que vous serez bon en programmation, vous pourrez accéder à vos propres fonctions, car vous comprendrez à quoi tout cela sert et comment cela fonctionne...
 
artmedia70:
Je répondrai, parce que je me suis moi-même " débattu " avec cette question pendant longtemps : ce n'est que pour tester des stratégies et les modifier rapidement que l'on peut laisser la comptabilisation des commandes hors de l'équation, et mettre la comptabilisation des erreurs au placard également. Il suffit de copier ce qu'il a dans le manuel et de les laisser faire. Fonctionne uniquement avec Trade() et Criterion(), si vous suivez le tutoriel de Sergei Kovalev. Criterion() - pour trouver des points d'entrée pour vos stratégies, Trade() - pour ouvrir/fermer des positions. Il suffit de travailler avec eux et de les modifier pour tester les stratégies. Et puis, ayant maîtrisé la programmation, vous arriverez à vos propres fonctions, car vous comprendrez à quoi tout cela sert et comment tout cela fonctionne...
.

Merci, j'ai tout testé, je veux essayer le trading via MT pour vraiment prendre en compte les ordres et les positions ouvertes/fermées avec des corrections de solde si nécessaire.
 
Vinin:

Vous devez regarder le code. Démontez la logique.

Le code de l'indicateur le plus vide... où il n'y a également rien...

 
#property indicator_separate_window
#property indicator_minimum 1
#property indicator_maximum 10
 
bool initFinished=false;
// добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectsDeleteAll();
   // удаляем все объекты
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(initFinished==false)
   {
      IndicatorShortName("Info");
 
      int winID=WindowFind("Info");
   
      if(winID<0)
      {
         // если номер подокна равен -1, то возникла ошибка
         Print("Чёт не могу твоего окошечка найти, пошел я отсюдова");
         return(0);
      }  
//------------------------ Тут можно рисовать ------------------------- 
 
// ----------------------- Но не нужно... ----------------

//------------------------------------------------------------------------- 
      WindowRedraw();      
            
      initFinished=true;
     
   }
   
   return(0);
}
Raison: