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

 

Ich habe es im Büro des Experten.

bool b=0,s=0, //соответственно бай или селл  
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;//      то же по ТП
double bl=0,sl=0; // лоты соответсвенно для бай и селл


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

if(bs==1||bl==1)
{   
    NewOrder1(OP_BUYLIMIT,Lot);
    
    Today=TimeDay(TimeCurrent());}
    

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());

return(0);}





 
artmedia70:
Die booleschen Variablen sind nicht von vornherein auf false initialisiert, im Allgemeinen setzen Sie sie vor dem Eintritt in die Schleife auf null (false) - wenn Sie die Schleife verlassen, haben sie die Werte, die ihnen in der Schleife zugewiesen wurden (besser true als 1), und sie werden diese Werte bis zum nächsten Eintritt in die Schleife beibehalten. Wenn die Eröffnung eines Auftrags strikt von den Werten dieser Variablen abhängt, dann ist nach dem Auftrag zur Eröffnung eines Auftrags zu prüfen, ob diese Position auf dem Markt vorhanden ist, und wenn dies der Fall ist, die Variablen auf Null (false) zu setzen

und im Code können Sie Folgendes skizzieren

 
artmedia70:
Vergleichen Sie den ADX-Wert des aktuellen Balkens (oder vorzugsweise des ersten Balkens) mit dem ADX-Wert des vorherigen Balkens (vorzugsweise des zweiten Balkens).

Wenn es ganz einfach ist, sieht es ungefähr so aus:

Aber es ist nicht sehr schön. Es ist besser, die ADX-Werte doppelten Variablen zuzuordnen und mit den Variablen zu arbeiten...






Vielen Dank für Ihre Hilfe:)
 

Meine 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 bis 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 liegt, während sie auf dem ersten Balken darunter liegt, d.h. ein unnötiges Verkaufssignal (in diesem Fall):


In der Abbildung können Sie sehen, wie die Trendlinie auf ein neues Extremum gesprungen ist (die Position ist mit einem Abwärtspfeil markiert) und das Preisniveau der neuen Trendlinie auf dem ersten Balken (horizontale rote Strichlinie)
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... :)

 
profitinvesting:
Vielen Dank für Ihre Hilfe:)
Gern geschehen :)
 
ToLik_SRGV:

Fügen Sie ganz am Anfang der Startfunktion eine Aufrufzeile zu dieser Funktion hinzu:

Der Berater wird 1 Mal aktiviert, nur bei einer neuen Leiste.

Lieber Anatoly. Herzlichen Dank für diesen Code. Eine weitere Frage, wie man es die ganze Zeit arbeiten, aber es kann nur 1 Handel auf einer Bar?
 
artmedia70:
nach einem Auftrag zur Eröffnung eines Auftrags prüfen, ob die Position auf dem Markt ist, und wenn ja, die Variablen zurücksetzen (false)

Sagen Sie mir, wie dies in meinem Auftrag umgesetzt werden kann?

Welche Funktion sollte ich in meine Aufträge einfügen, um sie auf Null zurückzusetzen?

 
FoxUA:

Sagen Sie mir, wie dies in meinem Auftrag umgesetzt werden kann?

Welche Funktion sollte ich in meinen Auftrag einfügen, um ihn auf Null zurückzusetzen?


Nachdem Sie geprüft haben, ob der Auftrag auf dem Markt ist , weisen Sie den Variablen einfach Werte zu. Beispiel: Variable1 = false;
Die Variablen, die Sie in der Schleife, die das Kriterium für die Auftragserteilung war, auf "true" gesetzt haben, müssen nach der Auftragserteilung wieder auf "false" gesetzt werden, da sonst die Aufträge weiterhin in Stapeln erteilt werden. Daher sollten Sie diesen Variablen den Wert "false" zuweisen.
 
artmedia70:
Nachdem Sie geprüft haben, ob ein Auftrag auf dem Markt vorhanden ist, weisen Sie den Variablen einfach Werte zu. Zum Beispiel Variable1 = false;
Die Variablen, die Sie in der Schleife, die das Kriterium für die Erteilung des Auftrags war, auf "true" gesetzt haben, müssen nach der Erteilung des Auftrags wieder auf "false" gesetzt werden. Daher sollten Sie diesen Variablen den Wert "false" zuweisen.

Ich muss sagen, dass ich seit zwei Tagen versuche, herauszufinden, was ich aus dem, was du gesagt hast, einfügen soll, also habe ich nichts verstanden. Würde es dir etwas ausmachen, diese Werte in den Code einzufügen, den ich gepostet habe, oder einfach eine Funktion zu schreiben und mir genau zu sagen, wo ich sie einfügen soll - dies ist der letzte Teil meines Puzzles und ich kann nicht herausfinden, wo und wie ich sie einfügen soll.

 
FoxUA:

Ich muss sagen, dass ich nicht für zwei Tage geschlafen und kämpfte mit dem Expert Advisor, weil ich nicht verstehe, was und wo zu setzen, was Sie gesagt haben, können Sie diese Werte in den Code, den ich gebucht oder einfach nur die Funktion schreiben und sagen, genau dort, wo es zu setzen ist das letzte Stück meines Puzzles und ich kann nicht konzentrieren, wo und wie es zu setzen

Ich möchte nicht an Ihrem Code herumpfuschen (böse, aber ehrlich :)). Sagen Sie mir genau, was Sie als Ergebnis 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, ich gehe jetzt ins Bett - es ist halb sechs Uhr morgens...