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

 
artmedia70:

Ich möchte mich nicht mit Ihrem Code befassen (böse, aber ehrlich :)). Sagen Sie mir genau, was Sie am Ende haben wollen, und ich schreibe Ihnen die Funktion, die Sie brauchen. Ehrlich gesagt, wird es für mich einfacher sein. Ich sollte meinen eigenen Code entwerfen... :)

... Oder du gehst ins Bett, schläfst ein, und am nächsten Tag werden sich all deine Puzzles zusammenfügen... :) Das mache ich, wenn ich es nicht kapiere... Übrigens, ab ins Bett - es ist schon halb 5 Uhr morgens...


Nach dem Setzen des Auftrags sollten die Variablen, die das Kriterium für den Auftrag waren, wieder auf "0" gesetzt werden,

 
Wer weiß. Wie kann ich das Verhältnis zwischen der Bewegung des Indikators (auf seiner Skala), z. B. RSI, und dem Verhältnis der durchlaufenen Währungs-Ticks ermitteln? Wenn der RSI zum Beispiel von 0 auf 50 gestiegen ist, wie viele Ticks entspricht das?
 
Infinity:
Wer weiß. Wie kann ich das Verhältnis zwischen der Bewegung des Indikators (auf seiner Skala), z.B. RSI, und dem Verhältnis der vergangenen Ticks der Währung ermitteln? Wenn der RSI zum Beispiel von 0 auf 50 steigt, wie viele Punkte wird er dann haben?

Fangen Sie den letzten Wert des RSI-Indikators bei einer Nullkerze. Wir warten auf den nächsten Tick. Die Zecke ist da. Lassen Sie den Preis hat genau 1 Punkt tickte. Sehen Sie, wie stark sich der RSI verändert hat. Das war's - die Quoten sind in unserer Tasche.
 
drknn:

Fangen Sie den letzten RSI-Indikatorwert an der Nullkerze ab. Wir warten auf den nächsten Tick. Die Zecke ist hier. Gehen wir davon aus, dass der Kurs genau 1 Punkt gestiegen ist. Sehen Sie, wie stark sich der RSI verändert hat. Das war's - der Koeffizient ist in unserer Tasche.

Aber dann, wie ist es möglich, zum Beispiel, ich habe den Koeffizienten von 1 Punkt gefangen, RSI hat auf seiner Skala von 50 übergeben, stellt sich heraus, dass es 50 Punkte überschritten hat, aber in der Tat war es eine Wohnung. Und die Kerze hat 2 Punkte. Wie kann man also in diesem Fall feststellen
 
cyclik33:

Lieber Anatoly. Herzlichen Dank für diesen Code. Eine andere Frage: Wie kann man es schaffen, dass es immer funktioniert, aber nur 1 Geschäft pro Bar macht?

Boris, es ist noch einfacher als das. Sie lassen diese Zeile fallen:

datetime new;

Ganz oben im Code (und zwar separat, nicht in einer Funktion).
An den Stellen, an denen die Funktion OrderSend(...) aufgerufen wird, schließen Sie sie einfach in eine zusätzliche Umarmung des if-Operators ein

if(new != Time[0]){
   new = Time[0];
   // здесь функция OrderSend(...);
}

Bevor nun eine neue Position eröffnet wird, wird geprüft, ob der aktuelle Balken einen Handel enthält oder nicht. Wenn dies der Fall ist, wird der aktuelle Balken in der Variablen new gespeichert, und wenn der aktuelle Balken mit dem gespeicherten identisch ist, wird der Handel nicht eröffnet. Wenn die Bar also neu ist, dann stimmt ihre Öffnungszeit nicht mit den Daten der Variablen new überein, das Geschäft wird geöffnet und die Variable new erhält einen neuen Wert.

Ich kenne die Architektur Ihres Expert Advisors nicht genau, aber diese Methode sollte in den meisten Fällen funktionieren.

 
FoxUA:

Nach dem Setzen des Auftrags sollten die Variablen, die das Kriterium für das Setzen des Auftrags waren, wieder auf "0" gesetzt werden,


Ich habe versucht, Ihren Code zu kompilieren, aber es sind Fehler aufgetreten.
Sie müssen Variablen, die als Kriterium für die Platzierung einer Bestellung verwendet wurden, in zwei Methoden(start() und NewOrder1()) verwenden und diese außerhalb aller Funktionen deklarieren:

bool b,s, //соответственно бай или селл  
bs,// если закрытие по стоплоссу ордера бай
ss,// если закрытие по стоплоссу ордера sell
bt,
st;//      то же по ТП
double bl,sl; // лоты соответсвенно для бай и селл
dann in der for-Schleife
for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

Ihnen sollten die erforderlichen Werte zugewiesen werden, und nachdem der Auftrag in der Funktion NewOrder1() erfolgreich geöffnet wurde, sollten sie auch dort auf Null zurückgesetzt werden.

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
//-----------
if(tic1<0){
   Print(GetLastError());
}else{
b=0;
s=0; 
bs=0;
ss=0;
bt=0;
st=0;
bl=0;
sl=0;
}
//-----------
return(0);}

Etwa so.

 
Infinity:

Wer weiß. Wie kann man das Verhältnis zwischen der Bewegung des Indikators (auf seiner Skala), z. B. RSI, und dem Verhältnis der von der Währung gekreuzten Ticks ermitteln? Um zu klären, wenn RSI ging zum Beispiel von 0 bis 50 - wie viele Ticks wird es gleich sein.

Ich hatte einmal ein ähnliches Ziel, also schrieb ich ein "Lineal" wie dieses, vielleicht würde es auch für Sie funktionieren.

//+------------------------------------------------------------------+
int get_pips_RSI_path(int home_shift, int end_shift){
   double home_index, end_index;
   double home_price, end_price;
   int path;
   
   home_index = iRSI(NULL,0,14,PRICE_CLOSE,home_shift);
   home_price = Close[home_shift];
   end_index = iRSI(NULL,0,14,PRICE_CLOSE,end_shift);
   end_price = Close[end_shift];
   
   if(end_price > home_price)path = (end_price - home_price)/Point; else path = (home_price - end_price)/Point;
   
   Alert("Между значениями RSI ", home_index, " и ", end_index, " было пройденно ", path, " пунктов.");
   return(path);
}
//+------------------------------------------------------------------+

Als Parameter senden Sie Verschiebungen von Balken mit gewünschten RSI-Werten, als Antwort erhalten Sie den Abstand zwischen ihnen in Pips.

 
ToLik_SRGV:

Ich hatte einmal ein ähnliches Ziel, also schrieb ich ein "Lineal" wie dieses, vielleicht würde es auch für Sie funktionieren.

Als Parameter senden Sie die Verschiebungen der Balken, in denen sich die gewünschten RSI-Werte befinden, als Antwort erhalten Sie den Abstand zwischen ihnen in Pips.


Danke, ich werde es heute Abend überprüfen.

Ich habe das starke Gefühl, dass der Test der Historie des Expert Advisors wegen der Unvollständigkeit der Zitate kein gutes Ergebnis liefern wird. Ich verstehe, dass der Kursverlauf durch die Archivierung des aktuellen Marktes (Candlestick-Kurse) gebildet wird, aber wie kann man sich auf das Ergebnis verlassen, wenn die realen Kurse (zumindest in meinem Fall) durchfliegen, manchmal für 40 Minuten einfach keine Kerzen, der Chart steht, dann fliegt er alle die gleiche Kerze.

 
ToLik_SRGV:

Vielleicht konnten Sie einfach keine profitable Kombination von Parametern finden. Versuchen Sie, die Option "Unbrauchbare Ergebnisse ignorieren" zu deaktivieren.

Vergessen Sie nicht, in den Einstellungen des Expert Advisors die Kontrollkästchen für die Parameter zu aktivieren, die Sie optimieren möchten, und die Schritt- und Optimierungsgrenzen festzulegen.

Danke, das ist richtig, "Unbrauchbare Ergebnisse überspringen" ist aktiviert.
 
artmedia70:


Freunde, ich kann nicht herausfinden, wie ich die unnötigen Signale loswerde, die erscheinen, wenn die Trendlinie umgekehrt wird. Die Trendlinie (im Beispiel absteigend) wird vom größten Extremwert zum kleinsten Extremwert innerhalb eines bestimmten Intervalls von Balken aufgetragen. Das Problem ist, dass die Trendlinie, sobald ein neues unteres Extremum auftaucht, zu diesem Extremum springt (sie ist so konzipiert).

Aber auch auf dem ersten Balken bildet die Trendlinie Niveaus mit dem Wert der Trendlinie, deren Kreuzung durch die Indikatorlinie ein Signal gibt. Liegt die Indikatorlinie beim ersten Balken unter diesem Niveau und beim zweiten Balken darüber, liegt ein Top-Down Crossover vor.

Also... Wenn die Trendlinie auf ein neues unteres Extremum springt, entsteht eine Situation, in der die Indikatorlinie auf dem zweiten Balken oberhalb der Trendlinie und unterhalb des eingezeichneten Niveaus und auf dem ersten Balken liegt, d.h. ein unnötiges Verkaufssignal (in diesem Fall):


Auf dem Bild ist zu sehen, dass der Trend ein neues Extrem erreicht hat (die Position ist mit einem Abwärtspfeil markiert) und das Preisniveau des neuen Trends auf dem ersten Balken (horizontale, rot gestrichelte Linie)
wurde niedriger als die AD-Linie auf dem zweiten Balken und die AD-Linie auf dem ersten Balken ist niedriger als das Preisniveau...
Dementsprechend wurde durch das Verschieben der Trendlinie zu einem unteren Extremwert ein unerwünschtes Signal simuliert... Dasselbe unnötige Signal ist schon früher aufgetreten -
Ich habe sie mit einer vertikalen hellblauen Linie markiert...

Daher die Frage: Wie lässt sich diese Situation vermeiden? Ich bin erschöpft, wenn ich mir etwas ausdenke...
Haben Sie eine Idee? Danke... :)



Ich verstehe, dass ein Handelssignal auftreten sollte, wenn die Indikatorlinie die Trendlinie kreuzt, und nicht umgekehrt, und Sie haben es in beide Richtungen. Behalten Sie die vorherigen Werte der Trendlinienposition in statischen Variablen und wenn sie sich nicht geändert haben, prüfen Sie, ob ein Kreuzungspunkt vorliegt, wenn die Trendlinie ihre Position geändert hat - setzen Sie sie zurück...

Grund der Beschwerde: