[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 179

 
Rustbunch:

Helfen Sie mir, einen EA oder ein Skript zu finden, es muss doch einen geben...

Ich benötige einen EA, der ein Geschäft mit einem bestimmten Verlust und Gewinn zu einem bestimmten Zeitpunkt auf dem Markt eröffnet. Ich brauche nichts anderes von ihm...

Ich danke Ihnen im Voraus.

Jeder Expert Advisor tut dies in MetaEditor, und die entsprechenden Skripte in MetaEditor!

if(Hour() >= xx) открыть;
 
Ich habe nämlich eine Auftragsbuchhaltung in einem Array, die ist ganz schön sauer.
 
if (!PozyProstavleny){ ArrayResize(Buy,Raz);ArrayResize(Sell,Raz);
   
           Price= (Ask+Dist*Point) ; TP_BUY=(Price+TP*Point);  SL_BUY= (Price- SL*Point);
           Price_SELL= (Bid-Dist*Point) ;  TP_SELL=Price_SELL-TP*Point;  SL_SELL=Price_SELL+SL*Point; K=1;
           
   for(int Raz1=0;Raz1<Raz;Raz1++){
   
           Sleep(2000); RefreshRates();  for(int A=25;A>=0;A--){if(IsTradeAllowed())break;if(A==0) Comment(" эксперту не разрешено 
торговать или поток для выполнения торговых операций занят "); }           
  tyccBuy= OrderSend (Symbol( ), OP_BUYSTOP,  Lot ,NormalizeDouble(Price, Digits), 5, NormalizeDouble( SL_BUY,Digits),  
 NormalizeDouble( TP_BUY,Digits), NULL, 450, 0, CLR_NONE);
   Buy[Raz1]= tyccBuy;
           Price= (Price+Dist*Point) ; TP_BUY= (Price+TP*Point); SL_BUY= (Price- SL*Point);
           Error=GetLastError();
     if (Error!=0){ string errorcomment = "Ошибка открытия ордера байстоп  "  + " " + Symbol() +  " " + ErrorDescript(Error); 
           Print (errorcomment);}
           
           Sleep(2000); RefreshRates();  for( A=25;A>=0;A--){if(IsTradeAllowed())break;if(A==0) Comment(" эксперту не разрешено торговать
 или поток для выполнения торговых операций занят "); }        
           Sell[Raz1]=OrderSend (Symbol( ), OP_SELLSTOP,  Lot ,NormalizeDouble(Price_SELL, Digits), 5, NormalizeDouble( SL_SELL,Digits), 
  NormalizeDouble( TP_SELL,Digits), NULL, 450, 0, CLR_NONE);
     Price_SELL= (Price_SELL -Dist*Point) ;TP_SELL=Price_SELL-TP*Point;   SL_SELL=Price_SELL+SL*Point;
            Error=GetLastError();if (Error==0)
            
            {errorcomment = "Ошибка открытия ордера селлстоп  "  + " " + Symbol() +  " " + ErrorDescript(Error); 
        Print (errorcomment);} PozyProstavleny=1; 
                       }
                       }   
                        
 

Einen guten Tag an Sie alle!

Ich bin ein Neuling. Dies ist mein erster Versuch, eine Idee im Tester in Code umzusetzen.

Die Idee ist einfach - eine Order abwechselnd nach oben und unten zum Eröffnungskurs jeder stündlichen Kerze zu eröffnen.

Ich habe einen einfachen Code geschrieben .... Aber das Problem ist, dass das Programm manchmal mehr als 1 Auftrag bei der Eröffnung einer Kerze öffnet.

Es scheint mir, dass es passiert, wenn mehr als 1 Tick in einer Sekunde kommt.

Ich habe versucht, in die Kopfzeile der if( ) -Bedingung zu setzen...

OrdersTotal()==0

Nur eine Bestellung wird wirklich geöffnet.



Aber diese Variante passt mir nicht, da am nächsten Tag die gegebene Kerze nicht geöffnet wird, da zum Zeitpunkt der Öffnung dieser Kerze

Es gibt bereits eine zufällige Anzahl von Aufträgen im Handel.

Ich habe auch versucht, die Ausführung der OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) mit return zu unterbrechen; ..... hat nicht geholfen.


Ich wäre Ihnen dankbar, wenn Sie mir sagen könnten, wie ich erreichen kann, dass zu jedem Tick innerhalb von 1 Sekunde nur 1 Auftrag geöffnet wird.

int start()

{
double Price=Ask;
double SL=Price-300*Point;
double TP=Price+300*Point;
if( Hour()==10 && Minute()== 00 && Seconds()==00)
OrderSend(Symbol(),OP_BUY,0.1,Preis,3,SL,TP);
}

 
Und so weiter.
 
Dimka-novitsek:
Ich weiß zwar nicht wie, aber die Daten sollten gespeichert werden.

//записать

void SaveArray(string File, double &a[])
{
    int h = FileOpen(File, FILE_BIN|FILE_WRITE);
    if(h>0)
    {
      int sz = ArraySize(a); 
      FileWriteArray(h,a,0,sz);
      FileClose(h);
    }
}

//прочитать

void OpenArray(string File, double &a[], int sz)
{
    int h = FileOpen(File, FILE_BIN|FILE_READ);
    if(h>0)
    {
      ArrayResize(a,sz);
      FileReadArray(h,a,0,sz);
      FileClose(h);
    }
}
 
solnce600:

Einen guten Tag an Sie alle!

Ich bin ein Neuling. Dies ist mein erster Versuch, eine Idee im Tester in Code umzusetzen.

Die Idee ist einfach - eine Order abwechselnd nach oben und unten zum Eröffnungskurs jeder stündlichen Kerze zu eröffnen.

Ich habe einen einfachen Code geschrieben .... Aber das Problem ist, dass das Programm manchmal mehr als 1 Auftrag bei der Eröffnung einer Kerze öffnet.

Es scheint mir, dass es passiert, wenn mehr als 1 Tick in einer Sekunde kommt.

Ich habe versucht, in die Kopfzeile der if( ) -Bedingung zu setzen...

OrdersTotal( )==0

Nur eine Bestellung wird wirklich geöffnet.



Aber diese Variante passt mir nicht, da am nächsten Tag die gegebene Kerze nicht geöffnet wird, da zum Zeitpunkt der Öffnung dieser Kerze

Es gibt bereits eine zufällige Anzahl von Aufträgen im Handel.

Ich habe auch versucht, die Ausführung der OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) mit return zu unterbrechen; ..... hat nicht geholfen.

Ich wäre Ihnen dankbar, wenn Sie mir sagen könnten, wie ich erreichen kann, dass zu jedem Tick innerhalb von 1 Sekunde nur 1 Auftrag geöffnet wird.

int start()

{
double Price=Ask;
double SL=Preis-300*Punkt;
double TP=Preis+300*Punkt;
if( Stunde()==10 && Minute()== 00 && Sekunden()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
}

Wenn das TechZad ist, bist du im Job!
 
Dankeschön!!!!!!
 

solnce600:

Ich wäre Ihnen dankbar, wenn Sie mir sagen könnten, wie ich es so einrichten kann, dass innerhalb von 1 Sekunde nur 1 Auftrag auf einen Tick geöffnet wird.

int start()
{
...

int ot=OrdersTotal();

bool open_allowed = true;

if(ot>0)
{
   if(OrderSelect(ot-1,SELECT_BY_POS))
   {
      if(TimeCurrent()-OrderOpenTime()<=1) open_allowed=false;  //если разница между текущим временем сервера и временем открытия последнего ордера 1 секунда или меньше, запретить торговлю
   }
}

if(open_allowed)
{
   //открываемся
}
...
}
 
Genau... Deklarieren Sie eine Variable, bevor Sie beginnen, und merken Sie sich die Zeit. Nach einer Bestellung ist sie gleich, sagen wir, wahr. Prüfen Sie dies vor der Einstellung ebenfalls. Ich bin nicht gut in Zeitvariablen. Bevor die Bestellung aufgegeben wird, wird geprüft, ob die Zeit größer ist als die tatsächliche Zeit, wenn sie zu dieser Variablen hinzugefügt wird. Wenn sie nicht größer ist, dann bestelle, und erinnere dich wieder an die neue Zeit! Ja, so ist es. Ziemlich einfach sogar!!!