[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 403

 
ruslanchik:
Bitte sagen Sie mir, wie ich die Stapelgröße berechnen kann

Seien Sie genauer mit Ihrer Frage.
 

Ist es möglich, einen unnötigen Optimierungsschritt zu überspringen und mit dem nächsten fortzufahren?

Beispiel: Es gibt Eingabeparameter(Typ double), die optimiert werden sollen: x1, x2, x3, x4. Ihre Werte liegen zwischen 1 und 5. Schritt 0,1

Es ist klar, dass es in diesem Fall 41*41*41*41=2.825.761 geben wird.

Aber wir müssen unter der folgenden Bedingung suchen: 10,5 < x1+x2+x3+x4 < 11,5. Hier ist bereits klar, dass es viel weniger Suchvarianten geben wird. (dies ist die eigentliche Beschränkung der benötigten Summe)

Wenn diese Einschränkung also wie folgt in den Code des Expert Advisors eingefügt wird

extern double    x1=1, x2=1, x3=1, x4=1;

int start()

{

  if (10.5<x1+x2+x3+x4 && x1+x2+x3+x4<11.5)

    {
      // основной код эксперта 

    }
  return; 

} 

dann werden bei der Optimierung (wenn jeder neue Tick eintrifft) auch die ungeeigneten Varianten genommen, z.B. x1=4, x2=4, x3=4, x4=4; was genau nicht passiert, ist die Ausführung des Hauptcodes.

Das heißt, solange dieser Optimierungsschritt das historische Intervall nicht "durchläuft", wird es keinen Übergang zum nächsten Schritt geben. Es wird eine "Überzeugung" geben, dass die Bedingung 10,5 < x1+x2+x3+x4 < 11,5 nicht erfüllt ist, und es wird nur die Ausführung des Hauptcodes anhalten

Die Zeit wird für solche offensichtlich untauglichen Varianten verschwendet.

Wie können wir solche Schritte bei der Optimierung mit offensichtlich ungeeigneten Parametern ausschließen?

Das heißt, wenn ein anderer Satz von Parametern ungeeignet wird, sollte dieser Schritt nicht optimiert werden, sondern sofort an einen neuen übergeben werden?

 
fmql:

Ist es möglich, einen unnötigen Schritt in der Optimierung zu überspringen und zum nächsten überzugehen?


ist es möglich, 3 Parameter zu optimieren und den vierten auf den gewünschten Wert einzustellen.

oder verwenden Sie die dritte Registerkarte "Optimierung", um das gewünschte Ereignis spontan zu erzeugen.

 
sergeev:

ist es möglich, 3 Parameter zu optimieren und den vierten auf den gewünschten Wert einzustellen.

oder verwenden Sie die dritte Registerkarte "Optimierung", um das gewünschte Ereignis spontan zu erzeugen.

Der Punkt ist, dass es in meinem Fall unmöglich ist, 3 Parameter ohne den 4. zu optimieren.

Hier ist ihre gemeinsame Auswahl wichtig, und ihre Summe ist im Intervall begrenzt.

(dies entspricht in etwa der Suche nach den Anteilen aller Komponenten in einem Gemisch, wobei die Gesamtmasse dieses Gemischs auf ein strenges Intervall begrenzt ist)

Können Sie mir mehr über die dritte Registerkarte sagen, was ist diese spontane Erzeugung des gewünschten Ereignisses?

 

Guten Tag.

Können Sie mir sagen, wie ich die Kerzenwerte (High, Low, Open, Close) des letzten Extremums des ZigZag Indikators extrahieren kann?

 
Wie bei jeder anderen Kerze auch. Die gleichen Funktionen. ( Denken Sie an den Durchmesser Ihres Planeten.(c) )
 
Wenn Sie die Taktnummer des letzten Extremums selbst ermitteln wollen, verwenden Sie den Objektnamen des letzten Strahls, um die Zeit der ersten Koordinate zu ermitteln, die der Zeit des Takts entspricht. Bestimmen Sie anhand der Taktzeit die Taktnummer. Bestimmen Sie die Merkmale des Stabes anhand der Stabnummer.
 
fmql:

Könnten Sie die dritte Registerkarte näher erläutern: Was ist die spontane Erzeugung des gewünschten Ereignisses?


Näheres dazu in der Hilfe

Kurz gesagt, Sie können Ihre eigenen Bedingungen für den Punkt auf der dritten Registerkarte erstellen (z. B. 10 Verlustaufträge in Folge eröffnen) und der Tester wird diesen Lauf automatisch überspringen und zum nächsten übergehen.

 
Stells:

Guten Tag.

Können Sie mir sagen, wie ich die Kerzenwerte (High, Low, Open, Close) des letzten Extremums des ZigZag Indikators extrahieren kann?


Ein solcher Vorgang erfordert einige Berechnungen.

Ich habe es immer so gemacht:

int start()
  {
 double // экстремумы Зиг-Зага
  y3=0, 
   y2=0,
    y1=0,
     y0,
     zz;   
 int    x3, x2, x1, sh=ShiftBars;// номера баров  

  y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1);

//=============================================================================
  // Берём три экстремума Зиг-Зага
   while (y3==0) 
      {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
      if (zz!=0 && zz!=EMPTY_VALUE) 
         {
         if      (y1==0) { x1=sh; y1=zz; }
         else if (y2==0) { x2=sh; y2=zz; }
         else if (y3==0) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info="";
string on_off="---------------------------------------------------"+  "\r\n";

on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n");
on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);    

Jetzt kennen Sie die Balken-Nummern der letzten 2 Extrema (Min und Max) und deren Höchst- und Tiefstwerte.... leicht zu finden!

- Schließen[x1], Öffnen[x2], .... usw.

Vielleicht schlägt jemand eine einfachere Lösung vor.

 
Eine Schleife kann nicht organisiert werden, X und Y sind immer 0.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i==0;i--){
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
  for( i=OrdersTotal();i==0;i--){OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+