Spread-Handel in Meta Trader - Seite 144

 
Scorp1978 >>:

rid спасибо хорошая идея (от тиков придется тогда отказываться), фильтр от сильных убыточных движений ты имеешь ввиду "если сумарный профит меньше чего то, то закрыть все позиции".......

Nein. Ich meinte den ersten Eintrag - "/if
//die Größe der ersten Kerze ist größer als der eingestellte Wert, kein Handel ist erlaubt..."

 
Guten Tag an alle! Frohe Feiertage für alle, die den Tag als Feiertag betrachten!
//---------------------------------------
Es ist eine Frage aufgetaucht. Hier ist eine Funktion, die den durchschnittlichen Spread zwischen den Instrumenten für die letzten NBars ausgibt (berechnet).
 double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars)
{
   int k;
   double N = 0;
   double Sum = 0;
   for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
   {
      if(N == NBars)
         break;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return(avarageSpread);
}
Bitte sagen Sie mir, wie ich
//-------------
int k;
double N = 0; double Sum = 0;
for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
{
if(N == NBars)
//------------------------
damit die Funktion den durchschnittlichen Spread-Wert nicht für alle NBars-Balken zurückgibt,
sondern für NBars-Balken außer dem letzten.
Mit anderen Worten, ich möchte, dass der letzte Balken von der Berechnung ausgeschlossen wird! Oder auch eine bestimmte Anzahl der letzten Balken sollte nicht in die Berechnung einbezogen werden.
Gibt es eine Möglichkeit, dies zu "organisieren"?
(Im Gegenzug kann ich am Montag, den 3. Mai, einen guten Markteinstieg geben. Mit einer hohen Wahrscheinlichkeit eines anschließenden gewinnbringenden Abschlusses!)
 
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   double Sum = 0;
   if(NBars > iBars(Symbol_1,Timeframe)) NBars=iBars(Symbol_1,Timeframe); // если н больше чем баров на графике то обрезаем
   if(NBarsSkip >= NBars) NBarsSkip=0; // если пропускаем баров больше/равно чем NBars, то ничего не пропускаем
   for(k = NBarsSkip; k < NBars; k++)
   {

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return(avarageSpread);
}
NBarsSkip legt die Anzahl der fehlenden Takte fest, die nicht an der Berechnung teilnehmen. c NBarsSkip by NBars nimmt an der Berechnung teil.
 
Vielen Dank, NCI!
Ich werde Ihnen gleich einen voraussichtlichen Eintrag schicken.
Eine weitere Frage.
Ich hatte gerade eine Idee.
Wie wäre es, wenn wir es noch einfacher machen. Stellen Sie es so ein:
Statt for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
setzen Sie
for(k = M; k < iBars(Symbol_1,Timeframe); k++),
wobei M die Anzahl der von der Berechnung ausgeschlossenen Bars ist .
Wird es funktionieren?


 
Nur nicht k=M, sondern k=M+1... Bar M wird nicht berücksichtigt
 
Ich danke Ihnen! Ich habe auch einen Beitrag geschickt.
 
Ich habe ehrlich gesagt zunächst nicht bemerkt, dass NBars nur Balken berücksichtigen sollte, die auf zwei Instrumenten gleichzeitig existieren, dann entspricht der Code, den ich gepostet habe, nicht dieser Logik. unddie Konstruktion mit M wäre auch nicht korrekt. in diesem Fall könnten Sie Folgendes tun:
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   int NReal = 0;
   double Sum = 0;
   for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
   {
      if(N == NBars)
         break;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         N++;
         if(N>NBarsSkip)
         {
            Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
            NReal++;  // счетчик Н которые не пропущены и посчитаны
         }
      }
   }
   if(NReal==0) return(0); // так как у нас не получилось рассчитать ни одного бара
   else
   {
      double avarageSpread = Sum / NReal;
      return(avarageSpread);
   }
}


 
Ich danke Ihnen. Aus irgendeinem Grund wurde mein Code zunächst nicht kompiliert, er gab einen Fehler zurück (Klammer)
Bis ich aus dem Funktionsnamen "...., int NBarsSkip " entfernt habe.
zu den externen Parametern des EA
extern int NBarsSkip =2
Ich weiß nicht, warum es einen Fehler gab.
Aber als ich ihn verschoben habe, war alles in Ordnung.
 

Ich habe diesen Zweig von vorne bis hinten gelesen - alle 145 Seiten. Danke an alle: rid, leonid553, fduch, neoclassic, getch, forex-k, goldtrader, timbo, fortrader. Ich habe eine Menge Informationen, die ich noch verdaue. Meine wichtigste Schlussfolgerung lautet: Man muss hier graben, es lohnt sich. P.s.: guter, einfallsreicher Thread, fast keine Überschwemmungen. Nochmals vielen Dank 2rid

 

Ich danke Ihnen!

"Informationen zum Nachdenken.

Ab Montag der ZM-ZL-Aufstrich (Mehl-Öl, 5:6)

!

Grund der Beschwerde: