Frage für Kenner - Seite 12

 
rid писал(а) >>

Ich bin nicht wirklich ein Experte auf diesem Gebiet.

Es wird jedoch davon ausgegangen, dass man die Fahne nach dem ersten Signal "hängen" lässt.

Auch wenn das 1. Signal bereits erschöpft ist!

Dann wird das 2. Signal ein Signal zum Öffnen geben, ohne dass es Probleme gibt.

Wenn ich die Frage richtig verstanden habe...

Aber die Flagge ist eine Variable, so wie ich sie verstehe, und bei einem neuen Tick sieht das Programm den ursprünglichen oder neu berechneten Flaggenwert. Vielleicht verstehe ich nicht, was eine Flagge ist?

 
MQLBankir >> :

Aber eine Flagge ist eine Variable, so wie ich sie verstehe, und bei einem neuen Tick sieht das Programm den ursprünglichen oder berechneten Wert der Flagge aus den neuen Daten. Vielleicht verstehe ich nicht, was eine Flagge ist?

Ein Flag ist eine boolesche Konstante, die den Wert true oder false hat, mit einer numerischen Darstellung von 1 bzw. 0.

Wenn die Bedingung des 1. Signals (wie das Überqueren von 2 Rädern) erfüllt ist, wird die Flagge auf true gesetzt, wenn die Überquerung noch nicht stattgefunden hat, bleibt die Flagge false! Für Ihre Aufgabe... würde es in etwa so aussehen:

bool signal1=true;

int start()

if (signal1==false) {return();}

signal1 ......... tra la get signal

if (signal1 ==true) //das erste Signal erscheint

{

signal2 .............. tra la Empfangssignal

signal1=false;

}

so etwas sollte passieren )))

oh, als ich schrieb, war es bereits unten definiert)

 
MQLBankir >> :

Aber eine Flagge ist eine Variable, so wie ich sie verstehe, und bei einem neuen Tick sieht das Programm den ursprünglichen oder berechneten Wert der Flagge aus den neuen Daten. Vielleicht verstehe ich nicht, was eine Flagge ist?

Ich kann hinzufügen, dass global deklarierte Variablen ihre Werte speichern.

>> bis sie zwangsweise geändert werden oder das Programm geschlossen wird.

 

Der Schutz der Flagge erfolgt wie folgt:

int flag;
int start()
{
 // функция принятия решения и установки флага
 if( flag==1)
  { flag=0;
   // код защищенный от запуска флагом   
  } 
return(0);
}
Übrigens
// функция принятия решения и установки флага

kann überall sein, je nach der Idee des Autors, mit einer anderen Abfolge von Aktionen.

 
Urain писал(а) >>

Der Schutz der Flagge erfolgt wie folgt:

Übrigens

kann je nach der Idee des Autors an beliebiger Stelle stehen und verändert die Reihenfolge der Handlungen.

>>Danke euch allen, scheint es herausgefunden zu haben))

 

Guten Abend. Von irgendwoher kommt der Ärger.

Ein Berater mit einem Martingal.

10 Schritte. Bei jedem Schritt hat die Position einen anderen Magier.

Zu Beginn funktionierte alles einwandfrei. Mehrere Tage lang.

Doch plötzlich funktionierte es überhaupt nicht mehr!

Die allererste Position wird eröffnet und sofort im nächsten Takt wieder geschlossen!

Es ist unklar, warum.


Und so geht es immer weiter. Öffnet und schließt sich.

Sie hat erst heute begonnen. Plötzlich!

Hier ist der Schlussblock:

 //жжжжжжжжжжжж  Закрытие позиций жжжжжжжжжжжжжжжжжжжжжжж
 //(используются ф-и И.Кима
if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {//если есть открытые позиции
// если цена открытия первой позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic  )+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic  )>0)  ClosePositions(NULL, OP_BUY, Magic );

// если цена открытия второй  позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_2)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_2)>0) ClosePositions(NULL, OP_BUY, Magic_2);

 // если цена открытия след.  позиции меньше текущей цены на тейкпрофит - закрываем всё открытые позиции  
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_3)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_3)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_4)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_4)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_5)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_5)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_6)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_6)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_7)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_7)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_8)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_8)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_9)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_9)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_10)+ TakeProfit_Buy*Point)<=Bid&& PriceOpenLastPos(NULL, OP_BUY, Magic_10)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);  

 } 

Vielleicht sieht jemand die Ungenauigkeit oder den Fehler? (nach Preisen der eröffneten Positionen)

 

rid писал(а) >>

Es ist nicht klar, warum.

Wird jemand plötzlich eine Ungenauigkeit oder einen Fehler erkennen?

Das Problem liegt wahrscheinlich nicht bei diesem Code, sondern bei der Eröffnung von Positionen oder der Berechnung von TakeProfit_Buy. Es ist wahrscheinlicher, dass es sich um Letzteres handelt.

Wenn es im Tester läuft, sollte Print helfen.

 

Ich berechne TakeProfit_Buy nicht - ich setze es einfach in den externen Parametern.

extern int       TakeProfit_Buy=21;

Im Tester - die gleiche Scheiße, aber stellenweise. Zunächst ist alles normal.

Und dann taucht diese Scheiße auf. Und nicht immer.

Ich werde einen Kommentar oder einen Ausdruck einfügen müssen...

Außerdem. Ich habe nie versucht, diese Art von Magie anzuwenden, als ich noch ein Anfänger war, aber ich habe es nie vergessen.

 

Ich glaube, ich habe das falsch verstanden. Und natürlich ganz und gar nicht dort, wo ich ursprünglich gesucht habe.

Neben dem oben genannten Verschluss habe ich auch diesen:

//----------------------- Закрытие позиций по текй профиту ----------------------------------

if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {// если есть открытые позиции
// если очередная  позиция закрылась по тейкпрофиту , то закрываем
// все остальные позиции  
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_3 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_4 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_5 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_6 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_7 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_8 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_9 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_10))  { ClosePosFirstProfit(NULL, OP_BUY, -1);} 
                                           }

Es stellt sich heraus, dass die Funktion flag
isCloseLastPosByTake( )//если поза закрылась по тейку - возвращает единицу
nach seiner Ausführung gleich 1 ist, aber nachdem alle anderen Positionen geschlossen wurden, immer noch gleich 1 ist !Und natürlich, wenn die nächste erste Position mit magischer Zahl = magische Zahl geöffnet wird - wird sie sofort geschlossen !

Es ist nur nicht klar, warum dieser Fehler erst nach zwei Tagen aufgetreten ist.

//--------------------------------------------------------------

Auch. Können Sie mir einen Rat geben, - wie kann ich diesen Block doch noch zum Laufen bringen?

Mit anderen Worten: Wie kann die Funktion isCloseLastPosByTake() nach dem Schließen aller Positionen zurückgesetzt werden?

 
rid >> :

Mit anderen Worten: Wie kann ich die Funktion isCloseLastPosByTake() zurücksetzen, nachdem alle Positionen geschlossen wurden?

Soweit ich das verstehe, sollte die Eröffnungszeit einer mit Gewinn geschlossenen Position länger sein als die der verbleibenden kleinen Aufträge, fügen Sie diese Bedingung hinzu und alles wird gut.