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

 
solnce600:

Einen guten Tag an Sie alle!

Ich bin ein Neuling. Dies ist mein erster Versuch, eine Idee im Tester in Code umzusetzen.

Die Idee ist einfach: Sie eröffnen eine Order zum Eröffnungskurs jeder stündlichen Kerze, abwechselnd nach oben und nach unten.

Ich habe einen einfachen Code geschrieben .... Aber das Problem ist, dass das Programm manchmal mehr als 1 Auftrag bei der Eröffnung einer Kerze öffnet.

Es scheint mir, dass es passiert, wenn mehr als 1 Tick innerhalb von 1 Sekunde kommt.

Als Alternative habe ich versucht, die Kopfzeile der if( )-B edingung einzufügen...

OrdersTotal()==0

Nur eine Bestellung wird wirklich geöffnet.



Aber diese Variante passt mir nicht, denn am nächsten Tag wird die angegebene Kerze nicht geöffnet, da zum Zeitpunkt der Öffnung dieser Kerze

es gibt bereits eine zufällige Anzahl von Aufträgen im Handel.

Ich habe auch versucht, OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP) zu unterbrechen; die Ausführung von start() mit return zu unterbrechen; ..... hat nicht geholfen.


Ich wäre Ihnen dankbar, wenn Sie mir sagen könnten, wie ich erreichen kann, dass zu jedem Tick innerhalb von 1 Sekunde nur 1 Auftrag geöffnet wird.

int start()

{
double Price=Ask;
double SL=Preis-300*Punkt;
double TP=Preis+300*Punkt;
if( Stunde()==10 && Minute()== 00 && Sekunden()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
}

Versuchen Sie diese Variante:
int TimeNow, TimePrev, PrevType;

int start()   
 {
  double Price,SL,TP;
     int Ticket;

  TimeNow=iTime(NULL,0,0);
  if(TimePrev==TimeNow) return(0);

  if(PrevType!=1) {
   Price=NormalizeDouble(Ask,Digits);    
   SL=NormalizeDouble(Price-300*Point,Digits);    
   TP=NormalizeDouble(Price+300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=1; } }

  else if(PrevType!=-1) {
   Price=NormalizeDouble(Bid,Digits);    
   SL=NormalizeDouble(Price+300*Point,Digits);    
   TP=NormalizeDouble(Price-300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_SELL,0.1,Price,3,SL,TP);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=-1; } }
 }
 
alsu:


Vielen Dank für Ihre prompte Antwort.
 
Diubakin:
Versuchen Sie diese Option:
Vielen Dank für Ihre prompte Antwort.
 
Liebe Fachleute! Wo kann ich die Funktion SloseBy() finden, die im manuellen Modus funktioniert? Ich möchte es zu meinen Eulen hinzufügen, so dass ich die Position mit maximalem Minus zu der mit maximalem Plus schließen kann, nicht manuell, sondern automatisch je nach den Bedingungen. Ich konnte sie in der Codebase nicht finden. Ich habe sie in der Codebase nicht gefunden. Vielen Dank!
 
borilunad:
Ev. Profis! Wo kann ich die Funktion СloseBy() finden, die im manuellen Modus funktioniert? Ich möchte es zu meinen Eulen hinzufügen, so dass es nicht möglich wäre, eine Position mit maximalem Minus in die gegenüberliegende mit maximalem Plus zu schließen, sondern automatisch, je nach den Bedingungen. Ich konnte sie in der Codebase nicht finden. Ich habe sie in der Codebase nicht gefunden. Vielen Dank!

Versuchen Sie diese Option:

bool LockOFF(int EA_Magic) {
 double Result, PrevLoss, PrevProfit;
    int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=-1; MaxLossTicket=-1;

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(OrderType()>1) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result<0.0 && (PrevLoss==0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if(MaxLossTicket==-1) return(false); // нет убыточной позиции
 if(order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(order_type!=OrderType()) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result>0.0 && (PrevProfit==0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if(MaxProfitTicket==-1) return(false); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if(!Ans) { Print("Ошибка при встречном закрытие"); return(false); }
 
 return(true); }
 

Sergej, bei einem flüchtigen Blick lohnt es sich! Ich schraube ihn an, stelle die Bedingungen und probiere ihn aus. Herzlichen Dank!

Ausprobiert, es funktioniert ohne Fehler! Jetzt nur noch mit den Bedingungen experimentieren, um den Effekt zu erhalten, und es wird gut! Aber das ist für morgen!

Ich danke Ihnen vielmals. Und interessante Träume!

 
borilunad:
Sergej, bei einem flüchtigen Blick lohnt es sich! Ich schraube ihn an, stelle die Bedingungen und probiere ihn aus. Herzlichen Dank!
Nur fügen Sie anstelle eines Gegenschließungsbefehls eine vollwertige Gegenschließungsfunktion ein - sonst ist es nur etwas für den Prüfer. Und initialisieren Sie die Variablen in der Funktion.
 
artmedia70:
Fügen Sie nur anstelle eines Gegenschließungsbefehls eine vollwertige Gegenschließungsfunktion ein - sonst ist es nur für den Prüfer. Und initialisieren Sie die Variablen in der Funktion.
Danke Artyom, es war zu spät. Ich werde heute alles nach den Regeln für Online machen!
 
borilunad:
Danke, Artyom! Es war zu spät. Wird alles nach den Regeln für online heute tun!
Viel Glück...
 

Guten Tag. Ich habe eine solche Frage.

Ich habe diesen Indikator für meine eigenen Bedürfnisse mit großer Mühe aus Codestücken anderer Expert Advisors und Induktorenumgestaltet. Es ist kein großer Code, und er funktioniert so, wie ich es will.

Die Sache ist die, dass es intern einige Berechnungen durchführt und Pfeile nach oben oder unten auf dem Diagramm anzeigt.

Wie kann ich einen Expert Advisor dazu bringen, eine Order in die richtige Richtung zu öffnen, wenn ein Pfeil auf dem Chart erscheint?

Genauer gesagt, muss ich nur wissen, welcher Pfeil jetzt aktiv ist, ich denke, ich kann den Rest machen

Hier ist ein Stück Code, um es klarer zu machen, es ist eine Initialisierung im Indikator

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

Vielen Dank im Voraus