[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 29

 

Hallo...

Ich habe einen EA geschrieben, bin aber auf dieses Problem gestoßen:

Ich habe entgegengesetzte Aufträge und z.B. für BUY habe ich 150 Pips Stop und 150 Pips Profit, für SELL sind die gleichen Levels gesetzt, aber nur umgekehrt (d.h. was für Buy Profit ist, dann für Sell Stop), d.h. eigentlich muss ich alles gleichzeitig schließen, sowohl Sell mit Buy als auch Buy mit Sell..... aber es gibt noch eine andere Sache, Spread!))) Und von diesen beiden gegensätzlichen Aufträgen sind die anderen 8 bereits geöffnet (wenn alle acht benötigt werden, sind die Bedingungen für sie natürlich anders, sie sind auch gegensätzlich 4/4)


Wie kann ich den Code korrekt programmieren, um alle Aufträge zu schließen, wenn sie gleichzeitig denselben Preis erreichen? Für in der Tester, wenn ich testen, der Preis erreicht manchmal ein gewünschtes Niveau, zum Beispiel, verkaufen geschlossen (nicht Erreichen einer vorbestimmten Ebene, ich glaube, es ist ein Spread) und kaufen hängen und nach kurzer Zeit fällt und kaufen geschlossen an der Haltestelle, so kann ich nicht sehen, das richtige Ergebnis.


Ich wäre Ihnen dankbar, wenn Sie Ihre Idee programmatisch, d.h. in Form von Code, ausdrücken könnten.


Um das Ganze besser zu verstehen, gebe ich Ihnen den Teil wieder, in dem meine beiden entgegengesetzten (ersten) Aufträge eröffnet werden.

if (by == FALSE) 
   {   g_ticket_112 = OrderSend(Symbol(), OP_BUY, Lots, NormalizeDouble(Ask, Digits), 1, NormalizeDouble(Ask - SL * Point, Digits), 
       NormalizeDouble(Ask + TP * Point, Digits), "", 111, 0, Blue);
   if (g_ticket_112 > 0) by = TRUE;
   } 
     
     if (se == false) 
   {for (g_pos_116 = OrdersTotal() - 1; g_pos_116 >= 0; g_pos_116--) 
   {if (OrderSelect(g_pos_116, SELECT_BY_POS, MODE_TRADES)) 
   {if (OrderSymbol() != Symbol() || OrderMagicNumber() != 111) continue;
    if (se == false) 
   {g_ticket_113 = OrderSend(Symbol(), OP_SELL, Lots, NormalizeDouble(Bid, Digits), 1, 
    OrderTakeProfit(),OrderStopLoss() , "", 222, 0, Blue);
    if (g_ticket_113 > 0) se = TRUE;}}}} 
 
Habt ihr ein Skript, das den Zeitplan über alle Wochenenden streckt, d.h. dass der Zeitplan nicht mit dem Montag verschmilzt und Samstag und Sonntag leer bleibt.
 

Hallo zusammen.

Die Frage ist, ob Sie eine Funktion haben, die die Eröffnung eines neuen Balkens(unabhängig vom Zeitrahmen) erkennt, oder, genauer gesagt, verschiedene Varianten, einen neuen Balken zu finden.

 
dmitriy086:

Hallo zusammen.

Die Frage ist, wer hat die Funktion, die die Tatsache der Eröffnung einer neuen Bar bestimmt (egal, was Zeitrahmen), oder genauer gesagt, können verschiedene Varianten (Anhänger) finden eine neue Bar.


Zeit speichern oldtime = Time[0] und die gespeicherte Zeit vergleichen if( oldtime !=Time[0])Print("Hurra für einen neuen Takt!!!");

SZY: Die Anhänger befinden sich in der Funktion iTime().

:)

 
//+------------------------------------------------------------------+
bool fNewBar()
  {
   static datetime NewTime=0;
   if(NewTime!=iTime (Symbol(),0,0))
    {
     if(NewTime==0)
      {
       NewTime=iTime (Symbol(),0,1);return(false);
      }      
     NewTime=iTime (Symbol(),0,0);
     return(true);
    }
   return(false);     
  }
//+----------------------------------------------------------------------------+

IgorM, das Problem ist, dass diese f-fi auf einem synthetischen Chart ist, wo iTime[0] gleich iTime[1] sein kann, so wie können wir loswerden Zeit, so dass der Expert Advisor nur einen Handel auf einem neuen Bar öffnet?
 
dmitriy086:
IgorM, das Problem ist, dass diese f-fi auf einem synthetischen Diagramm ist, wo iTime[0] gleich iTime[1] sein kann, so wie können wir loswerden Zeit, so dass der EA nur einen Handel auf einem neuen Bar öffnet?


wenn die Zeit der Balken 0 und 1 aus einem unbekannten Grund nicht übereinstimmt - der Datentyp datetime speichert Daten in Sekunden, ändern Sie die Balkenzeit um mindestens 1 Sekunde

Versuchen Sie dann, sich alle Merkmale des ersten geschlossenen Balkens zu merken, d.h. OHLC, Volumen und Eröffnungszeit, wenn Sie auch nur einen Parameter ändern - das bedeutet einen neuen Balken

iBars() zeigt die Anzahl der Balken im aktuellen Zeitrahmen an und wird durch die Terminaleinstellungen begrenzt, Sie können versuchen, die Anzahl der Balken mit der gespeicherten Balkenanzahl zu vergleichen und im Moment des Auftretens eines neuen Balkens sind diese Werte unterschiedlich - aber nicht immer, bei mir hat es auf diese Weise funktioniert, aber wahrscheinlich aufgrund der MT4-Build-Nummer kann diese Option nicht funktionieren

 
Haben Sie zufällig ein vorgefertigtes Stück Code? Ich kann nicht herausfinden, wie ich mir OHLC[1] merken und mit OHLC[0] vergleichen kann...
 
dmitriy086:
Sie haben kein fertiges Stück Code, oder? Ich kann nicht herausfinden, wie ich mir OHLC[1] merken und mit OHLC[0] vergleichen kann...


OHLC ist ein gängiges Akronym für Open, High, Low, Close

nicht mit Null vergleichen, sondern den ersten mit dem zuvor gespeicherten Wert, d. h.

init(){

oldHigh = High[1];

///

}

start(){

double tmp = High[1];

if(tmp !=oldHigh) {oldHigh = tmp;

//Überprüfen Sie die restlichen Parameter der Bar

}

}

 

Danke für den Tipp, ich werde es mir ansehen...

 

Bitte teilen Sie mir mit, wie ich die korrekte Prüfung in der Positionseröffnungsbedingung einstellen kann - ob es eine offene Position für dieses Instrument gibt oder nicht. Und wenn es eine Position für das Symbol gibt (egal ob Verkauf oder Kauf), dann findet die Eröffnung nicht statt, andernfalls wird das Signal zur Eröffnung der Position ausgelöst?

Hier ist der Code (ich denke, er ist für das Öffnen von Positionen zuständig):

if (NumberOfPositions("" ,-1,Magic)>=2)  флаг1=1;//если число позиций >= 2
if (NumberOfPositions("" ,-1,Magic)<1 )  флаг1=0;//если нет откр. позиций
if ( TradeDOWN==true && флаг1==0) {//если условия соответствуют заданным  
//продаем 1-й символ и покупаем второй символ
//----------------------------------------
if (NumberOfPositions(Symbol_1,OP_SELL,Magic)<1){//если нет поз.селл и поз.бай по 1-му символу
 if (NumberOfPositions(Symbol_1,OP_BUY,Magic)<1)
 {
 SL=0;TP=0;//открываем позицию, задаем стопы :
if(StopLoss_1>0)   SL=Bid_Tiker1+POINT_Tiker1*StopLoss_1;
if(TakeProfit_1>0) TP=Bid_Tiker1-POINT_Tiker1*TakeProfit_1; 
 ti=OpenPosition(Symbol_1, OP_SELL, Lots_1,0 ,0,Magic);
if(StopLoss_1>0 || TakeProfit_1>0) {//ставим стопы 
if (OrderSelect(ti, SELECT_BY_TICKET)) ModifyOrder(-1, SL, TP, clModifySell);}
                                   }}//если нет поз.селл и поз.бай по 1-му символу
//--------------------------------------
if (NumberOfPositions(Symbol_2,OP_BUY,Magic)<1){//если нет поз. бай и поз. селл по 2-му символу 
 if (NumberOfPositions(Symbol_2,OP_SELL,Magic)<1)
 {
   SL=0;TP=0;//открываем позицию, задаем стопы :
if(StopLoss_2>0)   SL=Bid_Tiker2-POINT_Tiker2*StopLoss_2;
if(TakeProfit_2>0) TP=Ask_Tiker2+POINT_Tiker2*TakeProfit_2;   
ti=OpenPosition(Symbol_2, OP_BUY, Lots_2,0,0,Magic);
if(StopLoss_2>0 || TakeProfit_2>0) {//ставим стопы 
if (OrderSelect(ti, SELECT_BY_TICKET))ModifyOrder(-1, SL, TP, clModifyBuy); }
                                   }}//если нет поз. бай и поз. селл по 2-му символу

Von der Logik her scheint es richtig zu sein, aber es werden trotzdem mehrere Positionen für ein Symbol geöffnet.

P.S.: Ich bin nicht der Programmierer. Wenn es möglich ist, erklären Sie dem Dummie die Einzelheiten.

Grund der Beschwerde: