[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 642

 
gordeef:

Ich bin ohnehin schon vorsichtig mit Umkehrungen und Korrekturen. Aber bezüglich der Trenderschöpfung bin ich auch daran interessiert, ich bin durch das Forum gewandert und habe bei CodeBase geschaut, bin aber auf keine Indizes zu diesem Thema gestoßen. Es wird interessant sein, Ihre Ergebnisse zu lesen. Ich habe eine andere Frage, sie schickte mir eine EA, die meine Verluste und Gewinne steuert, wie im Bild sollte es funktionieren, aber die Frage ist, es hat einen 15 Punkt Gewinn und der Preis kann noch höher gehen, wenn ich den Gewinn auf einen Handel zu erhöhen, kann es die allgemeinen Berechnungen und den Betrieb des EA brechen?
Ich denke, die Antwort auf diese Frage könnte in den Eingeweiden meines Expert Advisors liegen... Vielleicht wird sie ja von einem der erfahreneren Kameraden beantwortet... Ich denke, ihre Antwort wird eher aus ihrer Erfahrung heraus gültig sein - ich bin nur ein Anfänger... :)
 
artmedia70:

GUT. Vielen Dank, Victor. Bis jetzt funktioniert es einwandfrei. Bis jetzt, denn ich habe es schon lange nicht mehr verfolgt, aber ich hatte es noch nie, dass es Trend Up für mich ausgibt. Das ist jetzt der Fall:


Ich wusste, dass es immer einen mächtigeren Zauberer-Zauberer für einen Möchtegern-Zauberer gab... :)

Es ist natürlich alles nur ein Scherz, aber... Victor, ich möchte nicht einfach blind die richtige Lösung kopieren, sondern herausfinden und verstehen , wo der Hund versteckt ist, was ist das Wesen des Problems und dieses unverständliche Codeverhalten?


Probleme mit der Logik. Nicht mehr als das. Versuchen Sie, Blockdiagramme zu zeichnen. Es hilft
 

Eine andere Frage stellte sich mir: Zuerst wollte ich mehrere Zeilen schreiben, aber dann wurde mir klar, dass eine davon überflüssig ist und es sinnvoller wäre, sie in Klammern in die numerische Prozentform zu setzen, also habe ich sie entfernt und neben die Zeile gesetzt, in der gerade noch Platz war:

So war es anfangs auch:


Und so sieht es jetzt aus:


Ich werde von den Echos vergangener Ereignisse heimgesucht... Wenn der EA zum ersten Mal gestartet wird, bevor ein neuer Tick eintrifft, zeigt er immer das an, was er ursprünglich war... Auch wenn sie schon lange nicht mehr im Code enthalten ist. Woher kommen die Geister???

 
artmedia70:

Eine andere Frage kam auf: Zuerst wollte ich mehrere Zeilen machen, aber dann wurde mir klar, dass eine davon überflüssig ist und es besser wäre, sie in der numerischen Prozentform in Klammern zu setzen, also entfernte ich sie und setzte sie neben diejenige, wo genau der richtige Platz dafür war:

So war es anfangs auch:


Und so sieht es jetzt aus:


Ich werde von den Echos vergangener Ereignisse heimgesucht... Wenn der EA zum ersten Mal gestartet wird, bevor ein neuer Tick eintrifft, zeigt er immer das an, was er ursprünglich war... Auch wenn sie schon lange nicht mehr im Code enthalten ist. Woher kommen die Geister???





Sie müssen sich den Code ansehen. Nehmen Sie die Logik auseinander.
 
Vinin:

Logische Probleme. Mehr nicht. Versuchen Sie, Blockdiagramme zu zeichnen. Hilft

:):) Ich danke Ihnen... Äh... Ich habe schon so einen "Schottenkaro" auf meinem Boden... Mamma mia! Die drei Zeilen scheinen nicht sehr logisch zu sein. Es stellt sich heraus, dass, wenn man prüft: Wenn das 1., dann mach es, wenn man das 1. nicht macht, dann kommt natürlich das 2. Scheitert die 2., folgt die 3...

Nein... Es ist so: Wenn es der 1. ist, dann ist es so... Ansonsten, wenn 2., machen wir so-c, ansonsten, wenn nicht 1. und nicht 2., machen wir 3. und wenn nicht 1., nicht 2. und nicht 3., dann suchen wir nach Fehlern in der Logik...

Oh... Ich bin selbst völlig verwirrt... Nun, Victor, dein Zusatz verhält sich korrekt, und jetzt werde ich versuchen zu verstehen, warum ich einen weiteren else-Operator brauche, der an der Stelle zu sein scheint, an der dieses "otherwise" sowieso auftritt, nachdem ich mir das Hirn zermartert habe...

Danke für den Rat.

 
Vinin:

Sie müssen sich den Code ansehen. Um die Logik zu klären.

Es gibt kaum eine Logik darin - die einfache Ausgabe von Zeilen in der Reihenfolge nacheinander...

/--------------------------------------------------------------- 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 --
 

Leute, bitte teilen Sie die bereit, arbeiten (nicht glitchy) Vorlagen von Expert Advisor, so dass es nur möglich ist, die Handelsstrategie zu ändern, mit der Möglichkeit, die offene Position in die entgegengesetzte zu schließen, wenn nötig (Umkehrung, aber so, dass Buy / Sell in der Bedingung ist nicht durch andere, aber mit der Möglichkeit, separat die Bedingungen zu verschreiben:

wenn Bedingung zum Kauf
{
Opn_B=true; // Open Buy crit.
Cls_S=true; // Close Sell crit. Verkaufen
}
if condition to sell
{
Opn_S=true; // Kriterium offen Verkaufen
Cls_B=true; // Kriterium geschlossen Kaufen Kaufkriterium
} ), oder TP/SL, um die Position zu schließen.

Ich verliere meinen Kopf, ich kämpfe seit einem Monat damit. Ich kann Handelsstrategien nicht von Omega zu MT verschieben, irgendeine Art von Puffern/Schmuffern, weit hergeholten Arrays und Blöcken der Buchhaltung, Öffnen/Schließen und Fehlerbuchhaltung in einem EA.

Vielen Dank im Voraus an alle, die geantwortet haben.

 
Craft:

Leute, bitte teilt die fertigen, funktionierenden Vorlagen eines EA, so dass Sie nur die Handelsstrategie ändern können, mit der Fähigkeit, eine offene Position auf der gegenüberliegenden Seite zu schließen (Umkehrung), oder durch TP/SL, wenn nötig.

Ich beschäftige mich mit der Auftragsbuchhaltung, dem Öffnen und Schließen von Blöcken und der Fehlerbuchhaltung.

Ich werde Ihnen die Antwort geben, denn ich habe lange darüber "geschwitzt" - nur wenn man Strategien testet und schnell ändert, kann man die Aufträge aus dem Spiel lassen und auch die Aufträge und Fehler beiseite legen. Kopieren Sie einfach, was im Lehrbuch steht, und lassen Sie sie in Ruhe. Arbeiten Sie nur mit Trade() und Criterion(), wenn Sie dem Tutorial von Sergei Kovalev folgen. Criterion() - um Einstiegspunkte für Ihre Strategien zu finden, Trade() - um Positionen zu öffnen/zu schließen. Es genügt, mit ihnen zu arbeiten und sie zu verändern, um Strategien zu testen. Und dann, wenn Sie gut programmieren können, werden Sie zu Ihren eigenen Funktionen kommen, weil Sie verstehen werden, wozu das alles dient und wie es funktioniert...
 
artmedia70:
Ich antworte, weil ich selbst schon lange damit "kämpfe": Nur um Strategien zu testen und schnell zu ändern, kann man die Auftragsbuchhaltung außen vor lassen und auch die Fehlerbuchhaltung auf die lange Bank schieben. Kopieren Sie einfach, was im Lehrbuch steht, und lassen Sie sie in Ruhe. Arbeiten Sie nur mit Trade() und Criterion(), wenn Sie dem Tutorial von Sergei Kovalev folgen. Criterion() - um Einstiegspunkte für Ihre Strategien zu finden, Trade() - um Positionen zu öffnen/zu schließen. Es genügt, mit ihnen zu arbeiten und sie zu verändern, um Strategien zu testen. Und dann, wenn Sie das Programmieren beherrschen, werden Sie zu Ihren eigenen Funktionen kommen, weil Sie verstehen werden, wozu das alles dient und wie es funktioniert...

Danke, ich habe alles getestet, ich möchte versuchen, über MT zu handeln, um wirklich Aufträge und offene/geschlossene Positionen mit Bilanzkorrekturen zu berücksichtigen, wenn nötig.
 
Vinin:

Sie müssen sich den Code ansehen. Nehmen Sie die Logik auseinander.

Der Code für den leersten Indikator... wo es auch nichts gibt...

 
#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);
}