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

 
hoz:

Ich brauche dringend Hilfe, ich bin total verwirrt. Hier finden Sie die Handelsfunktion und die Auftragsänderungsfunktion:

Bei mir funktioniert derzeit die Auftragsänderung nicht, obwohl, als mehrere Funktionen in einer waren, alles funktionierte. Aber ich möchte, dass alle Funktionen der Einfachheit halber getrennt werden. Generell würde ich gerne die FunktionOrdersModifying haben, um Aufträge zu ändern. Ich verstehe, dass es logischerweise in die Funktion Trade eingefügt werden sollte, wo ich es eingefügt habe, aber wir müssen 2 Parameter sl und tp aus der FunktionOrdersModifying in sie übergeben.

Habe ich die Variablen sl und tp korrekt über die Parameter der FunktionOrdersModifying übergeben ?

Sie machen zuerst sl = 0; tp = 0; und dann if(sl != 0 || tp != 0).
 
rigonich:
Sie machen zuerst sl = 0; tp = 0; und dann if(sl != 0 || tp != 0).


Vitaly, der Punkt ist klar. Sehen Sie:

void OrdersModifying(double& sl, double& tp)
{
  int total = OrdersTotal() - 1;
  sl = 0; tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

Am Anfang sl = 0; tp = 0; Dann finde ich die normalisierten Werte von sl und tp, die bereits in der Reihenfolge auf der Grundlage von i_sl und i_tp, die vom Benutzer eingegeben werden, vorhanden sind. Und dann prüfe ich, obsl undtp ungleich Null sind, d.h. ob sie sich geändert haben, nachdem ich sie am Anfang der Funktion deklariert habe, dann ändern wir den Auftrag.

Und wennsl undtp gleich Null sind, bedeutet das, dass diese Parameter nicht berechnet wurden...wie ich es verstehe. Sobald ich die Werte dieser Variablen erhalte, werden sie sofort ungleich Null, und wir können die Reihenfolge ändern... Ergibt das einen Sinn?

 
hoz:


Vitaly, der Punkt ist klar. Siehe:

Am Anfang sl = 0; tp = 0; Dann ermittle ich anhand der vom Benutzer eingegebenen i_sl und i_tp die normierten Werte von sl und tp, die bereits in der Reihenfolge sind. Und dann prüfe ich, obsl undtp ungleich Null sind, d.h. ob sie sich geändert haben, nachdem ich sie am Anfang der Funktion deklariert habe, dann ändern wir den Auftrag.

Und wennsl undtp gleich Null sind, bedeutet das, dass diese Parameter nicht berechnet wurden...wie ich es verstehe. Sobald ich die Werte dieser Variablen erhalte, werden sie sofort ungleich Null, und wir können die Reihenfolge ändern... Ergibt das einen Sinn?



Tut mir leid, ich habe etwas übersehen, keine Brille und keine Farbe, aber warum übergibt man Parameter an diese Funktion, und dann auch noch per Referenz? Wenn i_sl,g_type... globale Variablen sind, funktioniert es ohne Parameter, und wenn Sie sie ändern müssen (Variablen nach der Änderung), tun Sie es in der gleichen Funktion nach der Änderung.
 
rigonich:

Tut mir leid, ich habe etwas übersehen, ich trage keine Brille oder irgendeine Farbe, aber warum sollten wir dieser Funktion Parameter übergeben, und zwar auch per Referenz? Wenn i_sl,g_type... globale Variablen sind, funktioniert es ohne Parameter, und wenn Sie sie ändern müssen (Variablen nach der Änderung), tun Sie es in der gleichen Funktion nach der Änderung.


Die Aufträge werden von denOpenBuy()- undOpenSell()-Funktionen gesendet, aber dieOrdersModifying()-Funktion modifiziert die Aufträge

D.h. wenn z.B. die Modifikationsfunktion in derTrade-Funktion (int Signal) oderOpenBuy() undOpenSell() platziert ist,dann sollten die sl und tp Werte, die in derOrdersModifying() Funktion erhalten wurden, auf jeden Falldort übergeben werden.Diese Werte fehlen in dieser Funktion.

 
hoz:


Die Aufträge werden durch die FunktionenOpenBuy() undOpenSell() gesendet, aber sie werden durch die FunktionOrdersModifying()geändert

D.h. wenn z.B. die Modifikationsfunktion in derTrade-Funktion (int Signal) oderOpenBuy() undOpenSell() platziert ist,dann sollten die sl und tp Werte, die in derOrdersModifying() Funktion erhalten wurden, auf jeden Falldort übergeben werden.Diese Werte fehlen in dieser Funktion.


In Ihrem Fall platzierendie FunktionenOpenBuy() undOpenSell() Aufträge ohne std und wenn die Aufträge platziert sind, werden sie mit der FunktionOrdersModifying() geändert. Ich sehe keine Notwendigkeit, die FunktionOrdersModifying() irgendwo anders zu platzierenund ihrirgendwelche Parameter zu übergeben. Sie müssennur dieVariablen sl und tp in dieser Funktion deklarieren. int sl = 0, tp = 0;

Entschuldigung, nicht int, ein Double.

 
rigonich:

IhreOpenBuy() undOpenSell() Funktionenplatzieren Orders ohne Sl usw., und wenn die Orders platziert sind, werden sie mit der FunktionOrdersModifying() geändert. Ich sehe keine Notwendigkeit, die FunktionOrdersModifying() irgendwo anders zu platzierenund ihrirgendwelche Parameter zu übergeben. Sie müssennur dieVariablen sl und tp in dieser Funktion deklarieren. int sl = 0, tp = 0;


Im Moment habe ich eine solche Handelsfunktion:

bool Trade (int signal)
{
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
  
  if(OrderStopLoss() == 0 && OrderTakeProfit() == 0)
    OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    
  if(UseBU == true)
     MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

Eine Änderung findet nicht statt.

 
hoz:


Im Moment habe ich eine solche Handelsfunktion:

Eine Änderung findet nicht statt.


Sie haben einen Auftrag, der in der Funktion Handel () nicht ausgewählt wurde.
 
rigonich:

Ich verstehe nicht, was Sie von dem Skript erwarten.


Sie benötigen ein Programm, das, wenn es in den Archivcharts gestartet wird

Die Abschnitte der Kursbewegung werden mit den angegebenen Parametern in Bezug auf Stärke und Zeitpunkt der Bewegung visuell gekennzeichnet.

Ein Beispiel: eine Korrektur von 400 Punkten in 30 Minuten. Das ganze Jahr über liegen alle Korrekturen innerhalb dieser Spanne.

Es ist unmöglich, sie von Hand zu beobachten. Verzerrungen. Ich hätte gerne eine Farbkodierung, die es ermöglicht, sie sofort zu erkennen.

___

Ich habe nachgeschaut, es gibt verschiedene "Histoty"-Programme. Sie zeigen jedoch nur den Kontoverlauf an.

Aber ich habe kein Segment des Preises durch die Filter, die ich angegeben habe, gefunden.

 
rigonich:

Sie haben keinen Auftrag in der Funktion Handel () ausgewählt.


So etwas gibt es. Hier ist die Lösung.

bool Trade (int signal)
{
  int total = OrdersTotal() - 1;
  
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
       
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }
  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

Und die Änderungsfunktion ist diese:

void OrdersModifying()
{
  int total = OrdersTotal() - 1;
  double sl = 0, tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

Seltsam Aber es gibt keine Stopps und Takes auf dem Ausgang wieder.

 
TUNGUS:


Wir brauchen ein Programm, das, wenn es in den Archiv-Charts gestartet wird

Die Abschnitte der Kursbewegung werden mit den angegebenen Parametern in Bezug auf Stärke und Zeitpunkt der Bewegung visuell gekennzeichnet.

Ein Beispiel: eine Korrektur von 400 Punkten in 30 Minuten. Das ganze Jahr über liegen alle Korrekturen innerhalb dieser Spanne.

Es ist unmöglich, sie von Hand zu beobachten. Verzerrungen. Ich hätte gerne eine Farbkodierung, die es ermöglicht, sie sofort zu erkennen.

___

Ich habe nachgeschaut, es gibt verschiedene "Histoty"-Programme. Sie zeigen jedoch nur den Kontoverlauf an.

Aber ich habe mit den von mir eingestellten Filtern kein Segment des Preises gefunden.


History, History_Draw - sie funktionieren wie Expert Advisors beim Testen.

Ich brauche so etwas, um die Korrekturen in der Historie anhand der angegebenen Parameter zu beobachten.

Grund der Beschwerde: