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

 
bool exit_for=false;
double max_1=0;
double max_2=0;
for(int k=0; k<Bars; k++)
{
	if(	iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k)<iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)
		&& iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)>iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+2) 	)
	{
		//Если это первый максимум:
		if( max_1==0)
			max_1=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);//Записываем номер бара экстремума
		else
		//Если первый найден, записываем второй
		{	
                        max_2=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);
                        exit_for=true;
                } 
	}
        //Выход из цикла, когда найдены оба максимума
        if( exit_for==true) k=Bars+1;  
}
Guten Tag. Bitte beraten Sie mich. Auf meine Frage nach dem Vergleich der Tops mit dem RSI, nachdem dieser einen Wert von 70 überschritten hat, wurde mir diese Lösung angeboten (Code oben)

So funktioniert das nicht. Als Ergebnis bekomme ich, dass ich für Maxima in der Geschichte suchen (es findet Maxima in den vergangenen Tagen), aber ich brauche es für die Erfüllung warten, nachdem diese Funktion Maßnahmen ergreift (wie Wert auf 1. bar > 70) ... Wenn diese Bedingung erfüllt ist (nicht vor dem Takt > 70, sondern danach), ist der 1. Maki niedriger als der 2. und die Order wird geschlossen.

Irgendwelche Tipps, was zu ändern ist.

Dankeschön
 
xruss писал(а) >>

noch eine Frage - helfen Sie uns weiter)

Wie kann man, nachdem ein Auftrag aus der Historie ausgewählt wurde, seinen Typ bestimmen (wurde der Auftrag durch Kauf oder Verkauf geschlossen)?

// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            type  =OrderType(); <-----
          }
        }
      }
    }
  }
}
 
Roger >> :
Sie haben eine Variable deklariert und versuchen dann, eine andere zu verwenden.

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!! Tja, das hättest du gleich sagen sollen..........., sonst macht das Alter keinen Spaß - aber die Jugend ist unangenehm.....

>> >>SPASSYBOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Könnten Sie mich bitte beraten
Ich brauche ein klares Verständnis dafür, ob eine Order mit Stop oder Profit geschlossen wurde
Ich habe die Variablen priceprofitbuy und pricestopbuy
vor dem Orderende mache ich pricebuy = Ask, dann wird die Order an pricebuy übermittelt, wenn sie erfolgreich ist, dann alarmiere ich und merke mir priceprofitbuy und pricestopbuy, basierend auf pricebuy
weiter mit priceprofitbuy >= Bid= Bid und pricestopbuy <= Bid, überprüfe ich, ob der Auftrag mit Gewinn oder Stop geschlossen wird
; manchmal hat Bid jedoch das Take-Profit-Niveau erreicht und der Auftrag wird geschlossen, aber während die Schleife priceprofitbuy >= Bid erreicht, ist Bid niedriger geworden, und die Schleife funktioniert nicht korrekt

Frage - gibt es eine Möglichkeit, eindeutig zu erkennen, dass der Auftrag mit Gewinn abgeschlossen wurde?
Ich habe versucht, der Ticketnummer des Auftrags eine Variable zuzuweisen und dann den Gewinn in der Historie zu überprüfen, aber der Auftrag kann nicht aus dem Ticket ausgewählt werden - nur der Gewinn wird in der Historie angezeigt.

 
gramp >> :

Ich habe die Variablen priceprofitbuy und pricestopbuy erstellt
Ich platziere pricebuy = Ask vor ordersend, dann order-send by pricebuy; wenn erfolgreich, alarmieren und speichern priceprofitbuy und pricestopbuy basierend auf pricebuy
dann prüfe ich anhand der Bedingungen priceprofitbuy >= Bid und pricestopbuy <= Bid, ob der Auftrag mit Gewinn oder Stop geschlossen wird
Es kommt jedoch vor, dass Bid das Take-Profit-Niveau erreicht hat, die Order geschlossen wird, aber während der Zyklus priceprofitbuy >= Bid erreicht hat, ist Bid niedriger geworden und dann funktioniert der Zyklus nicht richtig

Frage: Gibt es eine Möglichkeit, eindeutig zu erkennen, dass der Auftrag mit Gewinn abgeschlossen wurde?
Ich habe versucht, der Variablen eine Ticketnummer zuzuweisen und dann den Gewinn in der Historie zu überprüfen, aber der Auftrag kann nicht aus dem Ticket ausgewählt werden - nur der Gewinnwert funktioniert in der Historie.

Das ist nicht ganz richtig:

Eine Position kann zu einem Slippage (normalerweise zu einem schlechteren Preis) anstelle des exakten Preises eröffnet werden.

Korrekter wäre es, den Preis der offenen Order mit dem Befehl OrderOpenPrice() zu ermitteln, nachdem er zuvor mit OrderSelect(...) ausgewählt wurde.

Oder berechnen Sie nach Börsenschluss die Differenz zwischen dem Eröffnungs- und dem Schlusskurs. Letzterer wird durch die Funktion OrderClosePrice() bestimmt.

OrderType() gibt Ihren Typ (Kauf/Verkauf) zurück.

 

An xrust: Vielen Dank.


Es ist nur nicht klar, wie man in den Handelsbedingungen schreibt, dass, wenn der Typ des geschlossenen Auftrags OP_BUY war, dann blah blah(

Bei mir sieht es so aus:


int ORDtype;
// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            ORDtype  =OrderType(); <-----
          }
        }
      }
    }
  }
}
// торг условия
if(ORDtype=1)&&....

In der Bedingung habe ich richtig geschrieben, dass, wenn die Auftragsart OP_BUY war, dann blah blah blah?

 
xruss >> :

if(ORDtype=1)&&....

Ich habe in der Bedingung richtig geschrieben, dass wenn die Auftragsart OP_BUY ist, dann blablabla?

So sollte es sein:

if(ORDtype==1)&&....

 
Everlost >> :

So sollte es sein:

if(ORDtype==1)&&....

fa, wenn es keine Vorgeschichte gibt - in meinem Fall ORDtype ==0?

 
xruss >> :

Wenn es keine Vorgeschichte gibt - in meinem Fall ORDtype ==0?

Sie ist gleich dem Wert, der bei der Deklaration der Variablen angegeben wurde, d. h. in Ihrem Fall 0, da ihr kein Wert explizit zugewiesen wurde. Übrigens hatte ich in Ihrem vorherigen Beitrag nicht bemerkt, dass Sie den Auftrag OP_BUY auswählen wollten - diese Konstante ist 0, während 1 für OP_SELL steht. Es ist also besser, die Variable ORDtype mit dem Wert -1 zu deklarieren:

int ORDtype=-1;

Um Verwirrung zu vermeiden, welcher Wert welcher Art von Operation entspricht, können Sie ihn auch in der Bedingung angeben:


if (ORDtype==OP_BUY) ...

 
Everlost >> :

Sie ist gleich dem Wert, der bei der Deklaration der Variablen angegeben wurde, d. h. in Ihrem Fall 0, da ihr nicht ausdrücklich ein Wert zugewiesen wurde. Übrigens habe ich in Ihrem vorherigen Beitrag nicht bemerkt, dass Sie OP_BUY order auswählen wollten - diese Konstante ist genau 0, während 1 für OP_SELL steht. Es ist also besser, die Variable ORDtype mit dem Wert -1 zu deklarieren:

int ORDtype=-1;

Um Verwirrung zu vermeiden, welcher Wert welcher Art von Operation entspricht, können Sie dies auch in der Bedingung angeben:


if (ORDtype==OP_BUY) ...

und wenn es eine Verkaufsorder in der Historie gab und der Expert Advisor sie dann geschlossen hat (in der Historie wird sie (ihr Schließen) als t/p oder s/l angezeigt - wird sie nicht als die letzte betrachtet? konnte nicht den gewünschten Effekt erzielen((

Grund der Beschwerde: