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

 
Natürlich haben Sie Recht. Das bedeutete, dass Sie bereits einen Code haben, um nur einmal pro Takt zu messen.
 
sllawa3:
Ich glaube, Sie haben Recht... Ich habe auch meine Zweifel...

Sie können diese Methode zur Überwachung des Eigenkapitals verwenden, um alle Positionen zu schließen und Aufträge zu löschen, sobald der angegebene Prozentsatz des Eigenkapitalgewinns erreicht ist:

//--------------------------------------------------------------
// Описание глобальных переменных советника
// ----------------- Трал эквити -------------
extern double  PercentEquityForClose=15;
double         Equ_OLD,
               Equ_NEW,
               EquPerc,
               Equ_Start;

// ---- Дальнейшее описание глобальных переменных советника

//==========================================================

int init()                             // Функция init
{
   Equ_OLD=AccountEquity();
   Equ_Start=Equ_OLD; 
   EquPerc=Equ_Start/100*PercentEquityForClose;
   
// ---- Дальнейший код функции ----

   return;                             // Выход из init() 
}

//==========================================================
// ---- В функции слежения за событиями ----
// ---- вызываемой из функции start ----

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Ich habe ihn an Ort und Stelle geschrieben, daher kann er Fehler enthalten.
Um die Entwicklung des Aktienkurses bei jedem Balken zu verfolgen, brauchen Sie nur zu prüfen, ob ein neuer Balken eröffnet wird, und wenn dies der Fall ist, sollten Sie dieses Codefragment ausführen:

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Ich glaube, es geht ungefähr so...

 
Roger:
Natürlich haben Sie Recht. Das bedeutet, dass Sie bereits einen Code haben, um nur einmal pro Takt zu messen.
Nein, das tue ich nicht, aber ich habe oben etwas geschrieben, um das Eigenkapital bei jedem Tick zu überprüfen. Prüfen Sie einfach, ob eine neue Bar eröffnet wurde, und wenn ja, dann prüfen Sie das Eigenkapital... Ich glaube nicht, dass das schwer zu machen ist...
 
interessiert sich für die Umkehrung des Aktienkurses von steigend zu fallend, vorausgesetzt, der Aktienkurs liegt über dem Gleichgewicht... um etwas Offenes zu schließen...
 
sllawa3:
Ich interessiere mich für die Umkehrung des Eigenkapitals von steigend zu fallend, vorausgesetzt, dass das Eigenkapital über dem Saldo liegt... um alles zu schließen, was offen ist...

Hier ist die Funktion zum Definieren eines neuen Balkens:

//+------------------------------------------------------------------+
//|  возвращает признак появления нового бара для указанного периода |
//+------------------------------------------------------------------+
bool isNewBar(int timeFrame)
   {
   bool res=false;
   
   // массив содержит время открытия текущего (нулевого) бара
   // по 7 (семь) таймфреймам
   static datetime _sTime[7];  
   int i=6;
 
   switch (timeFrame) 
      {
      case 1  : i=0; break;
      case 5  : i=2; break;
      case 15 : i=3; break;
      case 30 : i=4; break;
      case 60 : i=5; break;
      case 240: break;
      case 1440:break;
      default:  timeFrame = 1440;
      }
//----
   if (_sTime[i]==0 || _sTime[i]!=iTime(Symbol(),timeFrame,0))
      {
      _sTime[i] = iTime(Symbol(),timeFrame,0);
      res=true;
      }
      
//----
   return(res);   
   }
   

... Interesse an der Umkehrung des Aktienkurses von steigend zu fallend, solange der Aktienkurs über dem Gleichgewicht liegt... um alles zu schließen, was offen ist...

Dann müssen wir das Eigenkapital bei jedem Tick überprüfen. Denn wenn Sie z. B. eine Stunde vor der nächsten Aktienprüfung auf Ticks arbeiten, kann die Aktie ihren Wert verlieren...

Wir sollten also nicht den Anstieg des Eigenkapitals um 1 % vergleichen, sondern seinen Anstieg oder Rückgang im Vergleich zum Stand des vorherigen Ticks, der in der Variablen Equ-OLD erfasst ist, mit seinem aktuellen Wert in Equ_NEW

 
sllawa3:
interessiert sich für die Umkehrung des Aktienkurses von steigend zu fallend, sofern der Aktienkurs über dem Saldo liegt... um alles Offene zu schließen...

Ungefähr so:

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0)    // Если эквити уменьшилось по отношению к своему прошлому значению,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера.
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

// (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, 
                                         // а то может в последующем и не дать увеличиться балансу, 
                                         // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)

Dies sind jedoch nur Informationen zum Nachdenken, kein fertiger Code...

 
drknn:

Ja, sicher. Nur heißt es nicht "Stop", sondern "Pending Order". Öffnen Sie ein Terminal. Drücken Sie darin F1. In dem daraufhin angezeigten Fenster öffnen Sie Inhalt - Handel - Auftragsarten.

)))) danke, aber nach Fonds verwirrt / ungewohnte Ausführung von Bid und Ask anstelle von Handel, wenn etwas verwirrt ist - nicht schüchtern, eine dumme Frage zu stellen, um Zweifel zu beseitigen. )))
 

Hilfe . der Händler hat fünf Nachkommastellen . die Funktion iOpen (NULL,0,n) ergibt nur vier Nachkommastellen (die Ablesung erfolgt über print) . wie kann man das Problem lösen .

 
pips500:

Hilfe . der Händler hat fünf Nachkommastellen . die Funktion iOpen(NULL,0,n) ergibt nur vier Nachkommastellen (die Ablesung erfolgt über Print) . wie löse ich das Problem . vielen Dank im Voraus.

Print() rundet auf 4 Ziffern auf, um den Typ double korrekt auf der Konsole auszugeben(der iOpen() 5 Dezimalstellen, in diesem Fall), sollten Sie die Funktion DoubleToStr() verwenden

string DoubleToStr( double value, int digits)
Konvertiert einen numerischen Wert in eine Textzeichenfolge, die eine Zeichendarstellung einer Zahl im angegebenen Präzisionsformat enthält.

Parameter:

value - Величина с плавающей точкой.

digits - Формат точности, число цифр после десятичной точки (0-8).

 
sllawa3:
Ich interessiere mich für die Umkehrung des Aktienkurses von steigend zu fallend, solange der Aktienkurs über dem Saldo liegt... um alles Offene zu schließen...

Und hier ist ein Beispiel dafür, wie es funktioniert... Ich habe absichtlich bei jedem neuen Balken eine Position eröffnet... Also, hier haben wir "OC Killer"... :)


Beiliegender Testerbericht, in dem es keine Begrenzer und Positionseröffnungen bei jedem Tick gibt - großer Prozentsatz ... Und keine Absenkung :) Schade, dass dich niemand so arbeiten lässt ...

Hier ist ein Bild des Berichts:


Ich habe mit diesen "Raids" eine Menge Geld verdient, fast ohne Drawdowns. Ich habe es nicht einmal geschafft, Übernahmen zu tätigen (Sie können sie oben sehen):


Dateien: