[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 140

 
valeryk:

bool NewBar()
{static datetime newbar;
bool res=false;
if(newbar==0)newbar=Time[0];
if(newbar!=Time[0]){res=true;newbar=Time[0];}
return(res);
}

Neue Barpräsenz .

Ich habe verstanden, dass das Symbol zum Eröffnungskurs des Balkens gesetzt wird. Und ich brauche sie zum Schlusskurs.
Ich habe es nicht geschafft, Ihren Code einzufügen, weil ich kein Programmierer bin. Sie missbilligt insbesondere diese bool NewBar()
 
supernyb:
Ich habe verstanden, dass das Symbol auf den Eröffnungskurs des Balkens gesetzt wird. Er muss auf den Schlusskurs gesetzt werden.
Ich habe es nie geschafft, Ihren Code einzufügen, weil ich kein Programmierer bin. Sie missbilligt insbesondere diese bool NewBar()
Beachten Sie den Zeitpunkt der Notierung und den Zeitpunkt der Einstellung des Balkens: 15 Minuten. Glauben Sie, dass sich Close[0] während dieser Zeit ändern kann?
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(NevBar()) 
     {
     //в этом блоке размещайте ваш код
     }    
//----
   return(0);
  }
//-----------------------------------------------------------------------------+
// Функция контроля нового бара                                                |
//-----------------------------------------------------------------------------+
bool NevBar(){
   static int PrevTime=0;
   if (PrevTime==Time[0]) return(false);
   PrevTime=Time[0];
   return(true);} 
 

Noch einmal, bitte. Hallo, ich habe das Skript aus dem Tutorial von S. Kovalev als Grundlage genommen. Ich möchte einen Expert Advisor erstellen, der einen Handel eröffnet, einen Stop-Loss setzt, den Gewinn mitnimmt und dann wartet, bis der Handel geschlossen ist (d. h. der Stop-Loss oder der Gewinn), und erst dann den Handel wieder eröffnet. Ich habe es mit Zyklus- und Zyklusunterbrechungen versucht. Bitte teilen Sie mir mit, wie ich dies tun kann. Ich dachte, es wäre vielleicht einfacher, Stop-Loss und Take-Profit nicht gleichzeitig zu setzen und den Kurs zu schließen, wenn er sich einem bestimmten Niveau nähert. Aber ich will es nicht so machen, weil ich Angst vor Slippage habe und jeder Punkt für mich wichtig ist. Ich habe es so verstanden, dass ich ein Geschäft oder manchmal auch mehrere auf einmal eröffne (ist das auch falsch?), aber ich kann keine neuen Geschäfte eröffnen, nachdem das Geschäft abgeschlossen ist. Oder beraten, wie zu verschreiben, so dass das Programm für die Leistung Stop-Loss oder tekaprofit warten, und NUR dann ging auf?

//+------------------------------------------------------------------+
int start() //---- Funktion start
{
double //---- deklarieren Variablen
x,
y;
//+------------------------------------------------------------------+
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-15*Point,Ask+15*Point); //---- Marktorder zum Kauf und Setzen eines Stopps und Gewinns 15 Punkte vom Eröffnungskurs
//+------------------------------------------------------------------+
while(x!=Ask-15*Point||y!=Ask+15*Point) //---- der Bedingung Ich möchte, dass der Handel geschlossen wird, bis der vorherige Handel geschlossen ist, d.h.е. ist es möglich,
{//----- NUR einen Handel offen halten
weiter;//---- unterbricht die Bedingung und geht zum nächsten Schritt über
}
//+------------------------------------------------------------------+
return;//---- function return
}
//+------------------------------------------------------------------+

 

Wenn es Ihnen egal ist, ob Sie einen Stop oder Take haben, warum prüfen Sie nicht einfach, ob es offene Aufträge gibt oder nicht?

if(AufträgeSumme()<1)

 

Können Sie mir sagen, was in dieser Situation getan werden kann? Ich habe einen Indikator. Ich muss eine vertikale Linie im Diagramm zeichnen, dann die Eigenschaften aufrufen, die Zahl kopieren und sie dann in den Indikator eingeben.

Es wäre gut, wenn der Indikator dort platziert würde, wo Sie mit der Maus klicken.

Zumindest wäre es möglich, sie mit der Maus auf dem Diagramm zu verschieben.


Dateien:
indicator.mq4  3 kb
 
Begemot7:

Noch einmal, bitte. Hallo, ich habe das Skript aus dem Tutorial von S. Kovalev als Grundlage genommen. Ich möchte einen Expert Advisor erstellen, der einen Handel eröffnet, einen Stop-Loss setzt, den Gewinn mitnimmt und dann wartet, bis der Handel geschlossen ist (d. h. der Stop-Loss oder der Gewinn), und erst dann den Handel wieder eröffnet. Ich habe es mit Zyklus- und Zyklusunterbrechungen versucht. Bitte teilen Sie mir mit, wie ich dies tun kann. Ich dachte, es wäre vielleicht einfacher, Stop-Loss und Take-Profit nicht gleichzeitig zu setzen und den Kurs zu schließen, wenn er sich einem bestimmten Niveau nähert. Aber ich will es nicht so machen, weil ich Angst vor Slippage habe und jeder Punkt für mich wichtig ist. Ich habe es so verstanden, dass ich ein Geschäft oder manchmal auch mehrere auf einmal eröffne (ist das auch falsch?), aber ich kann keine neuen Geschäfte eröffnen, nachdem das Geschäft abgeschlossen ist. Oder beraten, wie zu verschreiben, so dass das Programm wurde für die Leistung Stop-Loss oder tekaprofit warten, und NUR dann ging weiter?

int ticket=-1;
int start()       //---- функеция старт            
  {
  double     //---- объявляю переменные 
  x,
  y;
  bool sel;
  //+------------------------------------------------------------------+
  sel=false;
  if(ticket>=0)
   {
    sel=OrderSelect(ticket,SELECT_BY_TICKET);if(!sel) ticket=-1;
   }
  if(ticket<0 || (sel && ticket>=0 && OrderCloseTime()>0)) ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-15*Point,Ask+15*Point);
   return;                                                          //---- функция return 
    }

Oder besser so (im Falle eines Neustarts des Expert Advisors):

int ticket=-1;
int init()
 {
  if(GlobalVariableCheck("TICKET")) ticket=GlobalVariableGet("TICKET");
  else ticket=-1;
 }
int start()          
 {
  bool sel;
  sel=false;
  if(ticket>0)
   {
    sel=OrderSelect(ticket,SELECT_BY_TICKET);if(!sel) ticket=-1;
   }
  if(ticket<=0 || (sel && ticket>0 && OrderCloseTime()>0))
   {
    ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-15*Point,Ask+15*Point);
    if(ticket>0) GlobalVariableSet("TICKET",ticket);
   }
   return; 
  }
 
r772ra:
Beachten Sie die Kurszeit und die Zeit, zu der das Symbol gesetzt wurde, 15 Minuten. Glauben Sie, dass sich Close[0] während dieser Zeit ändern kann?


Danke, das ist genau das, was ich brauchte! Ich habe getan, was Sie gesagt haben, und alles hat funktioniert! Ich habe auch Close[1] anstelle von Close[0] in Star Price eingegeben, und es hat sich herausgestellt, dass meine Marke zu Schlusskursen gezeichnet wurde. Es wartet nicht auf einen Takt, wie ich es mir vorgestellt hatte.
 
001:

Ich möchte, dass der Indikator dort platziert wird, wo man mit der Maus klickt.

Um die Koordinaten des Punktes zu erhalten, an dem der Indikator ausgelöst wurde, können Sie Funktionen verwenden:

WindowXOnDropped()

WindowYOnDropped()

Preis und Zeit:

WindowPriceOnDropped()

WindowTimeOnDropped()

 
valeryk:

bool NewBar()
{static datetime newbar;
Das bool res=false;
if(newbar==0)newbar=Time[0];
if(newbar!=Zeit[0]){res=true;newbar=Zeit[0];}
return(res);
}

Verfügbarkeit einer neuen Bar .


Hier ist, was der Guru über Ihren Code gesagt hat!

In Ihrer Version wird die statische datetime newbar nicht mit Null initialisiert , und das ist falsch.

 
Sepulca:

Besser so (für den Fall, dass der EA neu gestartet wird):

IMHO ist es besser, nach Ihrem Auftrag zu suchen und zu sehen, ob er im Markt ist oder geschlossen wurde, und wie er geschlossen wurde, durch Take, Stop oder manuell. Von hier aus werden wir in verschiedene Richtungen tanzen.

Dann wird alles korrekt sein. Und globale Variablen können verloren gehen...