[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 262

 
Valdemar:

Meine Herren, können Sie mir sagen, wo ich einen Fehler gemacht habe, als ich diese Timing-Funktion in meinen EA-Code eingefügt habe?

Der Compiler hat mich mit Fehlern überschüttet.



An der Stelle, an der Sie eine Funktion innerhalb einer anderen Funktion deklariert haben:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {
 
Roll:

Siehe den 10. Parameter der angegebenen Funktion. Auf 0 gesetzt.

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

diese Zeile gefunden und was ist dort zu ändern?

 
Starting:

Die Anwendung ist einfach - ich lasse das Skript laufen...

Das ist es, was Sie beweisen mussten. Das heißt, Sie brauchen einen Code, der die richtige Reihenfolge bestimmt. Es gibt Dutzende solcher Situationen, und man kann nicht für jede einzelne eine spezielle Funktion speichern, um den Code zu vereinfachen. Sie muss für jeden Fall geschrieben werden.
Beispiele für ähnliche Funktionen finden Sie hier: Nützliche Funktionen von KimIV.

Wenn sie nicht von der Stange passen, können Sie sie in Analogie zu den vorhandenen selbst bauen.
 
Bicus:

Hier basiert die Berechnung auf der Preisträgheit. D.h. der Stop-Loss der ersten Order wird ausgelöst, die zweite Order ist im Gewinn mit einem Wert, der etwas unter dem Verlust liegt. Wenn sich der Kurs noch weiter in die gleiche Richtung bewegt, dann können wir den Gesamtgewinn erreichen.

Aber imho ist diese Strategie keinen Bissen wert.

Ja, richtig! Ich schätze, dass es noch ein paar Pips in die profitable Richtung gehen wird :)
 
granit77:
Das ist genau das, was wir beweisen müssen. Mit anderen Worten: Sie brauchen einen Code, der die notwendige Reihenfolge findet. Es gibt Dutzende solcher Situationen, und wir können nicht für jede von ihnen eine spezielle Funktion bereitstellen, um den Code zu vereinfachen. Sie muss für jeden Fall geschrieben werden.
Beispiele für ähnliche Funktionen finden Sie hier: Nützliche Funktionen von KimIV.

Wenn sie nicht von der Stange passen, können Sie sie in Analogie zu den vorhandenen selbst bauen.


Ich glaube, ich habe mich nicht ganz klar ausgedrückt.

Behauptung 1: Jeder Code, der nach dem Auslösen einer schwebenden Order auf das Eröffnungsdatum dieser Order zugreift (die zum Zeitpunkt des Auslösens marktfähig geworden ist), erhält das Eröffnungsdatum, das dem Datum der Platzierung der schwebenden Order entspricht - so funktioniert die Funktion OrderOpenTime().

Behauptung 2: Ohne einen Expert Advisor, der den Status der Aufträge auf dem Konto ständig überwacht, können Sie sich nicht an den genauen Zeitpunkt der Auslösung eines schwebenden Auftrags erinnern.


Mögliche Lösung 1. Wir können versuchen, vom Datum der Einstellung des schwebenden Auftrags bis zum aktuellen Datum zu laufen und den Zeitpunkt der ersten Kreuzung des Eröffnungskurses und der Auslöseschwelle zu notieren.

Dies wird mehr oder weniger genau die Zeit sein, aber es gibt ein großes Minus: die Spanne. Da wir den Spread nicht in der Historie aufzeichnen (ich nehme zum Beispiel nicht die Tick-Historie mit dem Spread aus Dukas, da ich nicht mit Dukas handele und wir ihn sammeln und aufzeichnen müssen), kann der Auftrag viel früher ausgelöst worden sein, als der Preis fast das offene Niveau berührte, es aber nicht überschritt, und der Auftrag wurde aufgrund der Spread-Ausweitung geöffnet, und nicht später, als wir tatsächlich sahen, dass der Preis die Linie für die Einstellung der ausstehenden Aufträge überschritt.


Die wahrscheinlichste Lösung besteht darin, einen Expert Advisor zu erstellen, ihn auf dem Chart zu platzieren und die Aufträge auf dem Konto zu überwachen. Ich möchte es nicht tun, denn es gibt auch Nachteile, die mit möglichen Problemen bei Pausen im EA-Betrieb verbunden sind.


Die Funktionen, auf die Sie hingewiesen haben. Sie haben einen Link auf die Funktion OrderOpenTime() angegeben. Bei den verzögerten Aufträgen ist es das Datum ihrer Erstellung und nicht das Datum ihrer Auslösung. Daher sind die bestehenden Funktionen nicht geeignet. Und es gibt keine Möglichkeit, sie zu kombinieren, da sie sich immer noch auf OrderOpenTime() für das Datum der Auftragseröffnung beziehen.

 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

diese Zeile gefunden und was soll dort geändert werden?

Drucken Sie die Parameter und sehen Sie
 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

diese Zeile gefunden und was soll dort geändert werden?

Sie haben den zehnten Parameter "Newest", während die Zahl, die Sie benötigen, die Verfallszeit der Bestellung ist
 

Hier ist die ganze Zeile

if (!(AccountFreeMarginCheck(g_symbol_284, OP_BUY, Lots) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */)) g_ticket_352 = OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest RX-1", MediumBlue);
 
 
Pyxlik2009:

Hier ist die ganze Zeile

Nochmals:

Dokumentation:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Der zehnte Parameter in der Zeichenfolge "Newest" ist keine Zahl. Aus diesem Grund gibt es einen Fehler

 

PapaYozh
:


Sie haben eine Funktion innerhalb einer anderen Funktion deklariert:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {


Danke für dein Feedback, lieber PapaYozh,aber ich habe diese Funktion in int start() eingefügt, aber das Ergebnis des Compilers ändert sich trotzdem nicht.

int start()
{
int H,M,Ticket;
double Max,Min,
Max1,Min1,
TP,
Total;

bool isTradeTimeInt(int hb=07,int mb=55,int he=23,int me=00) 
    {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

H=Hour();
M=Minute();
Total=OrdersTotal();
if(Total==0)
{
if(isTradeTimeInt==true)
{
   Max=High[iHighest(Symbol(),PERIOD_M5,MODE_HIGH,12,0)];
   Min=Low[iLowest(Symbol(),PERIOD_M5,MODE_LOW,12,0)];
Am Ende zeigte mir der Compiler diese Fehler an, und ich denke, er bezieht sich auf die falsche Variablendefinition?

Ich entschuldige mich für etwaige Unannehmlichkeiten, Unverständnis, nachdem alle, gerade erst anfangen, Erfahrungen in einem solchen nicht einfach zu gewinnen, und ich denke, dank dieses Forums und die Menschen, die hier geantwortet, weiter zu entwickeln und ihre Fähigkeiten zu verbessern, danke.