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

 

Können Sie mir sagen, wie ich den aktuellen Kurs oder den gleitenden Durchschnitt korrekt mit der Trendlinie vergleichen kann?

Ich danke Ihnen im Voraus.

    double maH_fast=iMA(NULL,fast_maH_timeframe,fast_maH_period,0,fast_maH_method,fast_maH_price,0);

    if (ObjectFind("Tr_S1")==-1)
     {
      Create_Tr_S("Tr_S1",White,timf2s,TF2S,timf1s,TF1S);
     }

    if(maH_fast>"Tr_S1")
     {...}
 
ikatsko:

WIE WÜRDEN SIE DIE ZAHL DER GEWINNBRINGENDEN KAUFPOSITIONEN UND DIE ZAHL DER GEWINNBRINGENDEN VERKAUFSPOSITIONEN GETRENNT ZÄHLEN?

Die Strategie ist wie folgt: Wenn die Anzahl der profitablen Long-Positionen seit dem Start des EA (oder besser - für die gesamte Kontohistorie) größer ist als die Anzahl der Short-Positionen, dann sollten nur Long-Positionen eröffnet werden dürfen. Und vice versa.

Es ist klar, wie diese Geschäfte zu zählen sind, wenn sie durch den Expert Advisor geschlossen werden: Schließen - Zählen. Aber wenn eine Position durch TP oder SL geschlossen wird, dann ... ?

Vielleicht hat jemand einen fertigen Code für diese Funktion?


int ProfitableOrdersOfLongs(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()==0)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
//====================================================================================================== 
int ProfitableOrdersOfShorts(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()=1)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
 
nemo811:

Können Sie mir sagen, wie ich den aktuellen Kurs oder den gleitenden Durchschnitt korrekt mit der Trendlinie vergleichen kann?

Ich danke Ihnen im Voraus.

Eine Trendlinie hat einen Startpunkt mit Zeit-Kurs-Koordinaten und einen Endpunkt mit Zeit-Kurs-Koordinaten.

Sie können die Geradengleichung mit denselben Koordinaten verwenden, um das Kursniveau an einem beliebigen Punkt zu finden, der zwischen diesen beiden Koordinaten des konstruierten Segments liegt, und die Kursniveaus von MAA und dem Kreuzungspunkt des gewünschten Balkens mit dieser Linie vergleichen...

Sie können lesen - es gibt eine detaillierte Beschreibung eines solchen Beispiels.

 
Roman.:

Sie nehmen die letzte geschlossene Order, vergleichen ihre Schlusszeit mit der vorhergehenden geschlossenen Order mit OrderCloseTime(), wenn sie gleich ist, vergleichen Sie sie mit der Schlusszeit Ihrer vorhergehenden geschlossenen Order... So läuft das Ganze natürlich in einer Schleife - vom letzten abgeschlossenen zum ersten, man geht einen nach dem anderen durch und vergleicht den Zeitpunkt des Auftragsabschlusses... Eine andere Sache - drucken Sie die Schließungszeit der letzten Aufträge, die Sie vorher kennen, sagen wir drei Aufträge , kann es anders sein , auch wenn Sie es als " gleichzeitig" verstehen, d.h. wie ich es verstehe, schließt der Auftrag zu jeder Zeit, d.h.. In der Tat kann der Zeitpunkt der Schließung von, sagen wir, drei Aufträgen auf einmal nicht gleich sein - versuchen Sie print() und sehen Sie die Werte Ihrer drei TIME-Aufträge - ihre Werte von OrderCloseTime() Eigenschaften, d.h., wir müssen vielleicht das Konzept der TIME of closing einführen, d.h. die Abweichung der Schließungszeit von mehreren Aufträgen um einen kleinen Wert, wenn wir davon ausgehen können, dass sie gleichzeitig geschlossen haben. Experimentieren Sie und überzeugen Sie sich selbst von hier aus.

Danke, es hat funktioniert, aber jetzt wird eine Mehrfachbestellung geöffnet.

Ich habe es so gemacht

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
 
vik-777:

Danke, es hat funktioniert, aber jetzt öffnet sich eine Mehrfachbestellung

Ich habe es so gemacht

Problem gelöst. Vielen Dank an Sie alle.

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
     a = OrdersHistoryTotal();
     if (a>w)
     {
     if (sarik>0)
      {   
      OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,4),1,Ask - SL1*Point,Ask + 10*Point,0,2);
      w++;
      }
 
nemo811:

Können Sie mir sagen, wie ich den aktuellen Kurs oder den gleitenden Durchschnitt korrekt mit der Trendlinie vergleichen kann?

1. if(maH_fast>"Tr_S1") {...} -- Fehler: maH_fast ist eine reelle Zahl, "Tr_S1"-Wert vom Typ String;
2. double ObjectGetValueByShift( string name, int shift)
Die Funktion berechnet und liefert den Kurswert für den angegebenen Bar (Offset vom aktuellen Bar). Der Preiswert wird anhand der linearen Gleichung auf der Grundlage der ersten und zweiten Koordinate berechnet. Gilt für Trendlinien.
Parameter:
name - Objektname.
shift - Nummer des Balkens.
Beispiel: double price=ObjectGetValueByShift("MyTrendLine#123", 11);
 
Hallo! Ich habe folgende Frage... sagen wir, iHighest und iLowest können verwendet werden, um die Bar-Nummer mit dem maximalen Wert von High/Low für einen bestimmten Zeitraum herauszufinden, aber wie kann ich den maximalen Wert des st Dev Indikators für eine bestimmte Anzahl von Bars herausfinden?
 
double maxdev,mindev=1;
for(int i=0;i<counbar;i>0)
{
double val=iStdDev(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i);
if(mindev>val)mindev=val;
if(maxdev<val)maxdev=val;
}
Print("maxdev - ",maxdev," mindev - ",mindev);
Ungefähr so.
 
7sintez:

Ich habe mir alles angesehen, ich habe alles getan... Es wird keine Position eröffnet, das ist alles! Es schließt richtig, aber es öffnet sich nicht... Ich weiß nicht, was ich tun soll! Vielleicht findet jemand einen Fehler in dem Programm?




Es öffnet und schließt Aufträge auf 5 min EURUSD korrekt. Leichte Änderungsprobleme, versucht oft, mit den gleichen Werten zu ändern, daher häufige Fehler.
 

Hallo zusammen. Hilfe für eine Anfängerin, bitte:

Unterm Strich.

1) Die Frist beträgt 1 Tag.

2) Es gibt einen offenen Auftrag OrderSend(...). Es hat SL und TP. Aber als zusätzliche Bedingung zu Stop und Loss müssen wir den Auftrag ab dem Zeitpunkt der Eröffnung bis zu 18 Stunden laufen lassen und ihn dann zum aktuellen Kurs schließen.

Mit anderen Worten: Eine der drei Bedingungen muss erfüllt sein:

1. ein Stop-Loss ausgelöst wird

oder

2. Take Profit wird ausgelöst

oder

3 Da weder Stop-Loss noch Take-Profit ausgelöst wurden, wird die Position 18 Stunden nach ihrer Eröffnung zum dann aktuellen Kurs geschlossen.

So stellen Sie diese Zeitbedingung ein.


Frage 2:

Wie wird die Bedingung korrekt formuliert, dass das Ereignis eintritt, wenn (Zeitraum 1 Tag):

- CLOSE des aktuellen Balkens ist größer als C des vorangegangenen Balkens und größer als C des vorangegangenen Balkens, und C des vorangegangenen Balkens ist ebenfalls größer als C des vorangegangenen Balkens.


Machen Sie sich keine Sorgen, bitte. Ich saß vorher auf Rumus, und ich bin gerade dabei, alles wieder aufzubauen...

Grund der Beschwerde: