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

 

Wie Sie wissen, gibt es zwei Linien, eine, die den neuen Höchstständen in einer Reihe von Kerzenständern folgt, die andere, die den Tiefstständen folgt. Wenn der Abstand zwischen den Linien mehr als 50 beträgt, sollte eine vertikale Linie gezogen werden. Die vertikale Linie benötigt eine Koordinate - die Zeit. Wie kann ich die Zeit zeichnen, wenn der Abstand zwischen den Linien mehr als 50 beträgt? Mir fällt nichts ein.

Ich wollte die vertikale Linie mit ObjectCreate zeichnen... Wenn es ohne Zeit geht, was sollte dann verwendet werden?
 
waitra >> :

Könnte es eine Funktion geben, die einfach feststellt, dass "noch keine Aufträge in der EA-Historie vorhanden sind"? - Das würde ausreichen.

Ich weiß es nicht. Vielleicht kann uns das jemand hier sagen?

Ich denke, wir sollten versuchen, Kims Funktion zu ändern. Diese hier:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает количество позиций.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                            |
//|    sy - наименование инструмента   (""   - любой символ,  |
//|                                     NULL - текущий символ)          |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)               |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}

D.h. statt MODE_TRADES nehmen Sie MODE_HISTORY - d.h. der Auftrag wird unter den geschlossenen und gelöschten Aufträgen ausgewählt.

Dann (ändern Sie den Namen von f-i) :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY (string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}

Probieren Sie es aus - wird es funktionieren oder nicht?

 

Guten Tag, Freunde.


Bitte beraten Sie mich diesbezüglich.


Ich muss zum Beispiel eine Position eröffnen, wenn eine "Preiskerze" einen gleitenden Durchschnitt überschritten hat.

Bisher weiß ich nur, wie man Signale klassifiziert, wenn eine Kerze über/unter dem Durchschnitt geschlossen/geöffnet hat...

( iMA( .....) >Close[1] oder iMA(....) >Open[0] )

Wie kann ich einsteigen, wenn die aktuelle Kerze bereits über/unter dem MA liegt, anstatt darauf zu warten, dass die aktuelle Kerze schließt und die nächste geöffnet wird?


Vielen Dank im Voraus.

 
Morzh09 >> :

Guten Tag, Freunde.


Bitte beraten Sie mich diesbezüglich.


Ich muss zum Beispiel eine Position eröffnen, wenn eine "Preiskerze" einen gleitenden Durchschnitt überschritten hat.

Bisher weiß ich nur, wie man Signale klassifiziert, wenn eine Kerze über/unter dem gleitenden Durchschnitt schließt/eröffnet...

( iMA( .....) >Close[1] oder iMA(....) >Open[0] )

Wie kann ich einsteigen, wenn die aktuelle Kerze bereits über/unter dem MA liegt, anstatt darauf zu warten, dass die aktuelle Kerze schließt und die nächste Kerze öffnet, wenn sie bereits über/unter dem MA liegt?


Ich weiß nicht, was ich damit anfangen soll.

Wie gefällt Ihnen das?

iMA(....) >Open[0] ? - Null ist die aktuelle Kerze.

 
rid >> :

Was kann man daran nicht mögen?

iMA(....) >Open[0] ? - Null ist der aktuelle Kerzenständer

es stimmt, aber es gibt beispielsweise Fälle, in denen der Kurs nach der Eröffnung unter dem MA in einer langen Kerze den MA durchbricht (in der Regel aufgrund von Nachrichten) und nach oben steigt, ab....

Wenn wir meine Eröffnungskriterien verwenden, könnten wir solche Züge übersehen...

Ich würde also gerne eine Position eröffnen, wenn der Kurs aktuell über/unter dem Durchschnitt liegt, anstatt darauf zu warten, dass diese Kerze schließt und die nächste Kerze eröffnet wird.

 

Das könnte sein:

if (  iMA(.... .... , 1) >Close[1]  && iMA(.... ... , 0) < Open[0]  ) // продажа

(Wenn der MA des vorherigen Balkens größer ist als der Schlusskurs des vorherigen Balkens und der MA des aktuellen Balkens kleiner wird als der Eröffnungskurs des aktuellen Balkens, dann verkaufen)

 

Ich habe zwei Tage lang herumprobiert und kann es nicht herausfinden. Ich habe den Code aus Kovalevs Tutorial übernommen und versucht, eine Kauforder zu eröffnen, und erhielt die Antwort "Error 130".

Code

nt f_Open_Ord(int Tip)
{
int Ticket, // Auftragsnummer
MN; // MagicNumber

double SL, // StopLoss (relativer Kurswert)
TP; // TakeProf (relativer Kurswert)
//--------------------------------------------------------------- 3 --
while(g_Mas_Tip[Tip]==0) // Solange .
{ //...kein Erfolg
if (SL<g_Level_new) // if less than allowed...
SL=(g_Level_new+20); // ... dann zulässig
if (TP<g_Level_new)
// Wenn weniger als zulässig...
TP=(g_Level_new+20); // .dann zulässig
MN=TimeCurrent(); // Einfache MagicNumber
f_Inform(13,Tip); // Nachricht bei Eröffnungsversuch
if (Tip==0) // Let's open Buy
{
SL=Bid - SL*Point; // StopLoss (Preis)
SL=NormalizeDouble(SL,Digits);
TP=Bid + TP*Point; // TakeProfit (Preis)
TP=NormalizeDouble(TP,Digits);
Ticket=OrderSend(Symbol(),0,g_Lots_New,Ask,5,1.46500,1.47500,",MN);
err=GetLastError();
Comment("Fehlernummer ",err);
if (Ticket>0) f_Inform(4);
//if (Ticket<0) f_Inform(25)

Code überarbeitet, alles funktioniert korrekt, ich denke der Fehler liegt nicht im Code. DC-Broco/.

 

Sorri, das war voreilig. Die Werte 1,46500 und 1,47500 in der Funktion OrderSend sollten in SL bzw. TP geändert werden

 
VNG писал(а) >>

Sorri, das war voreilig. Die Werte 1,46500 und 1,47500 in der Funktion OrderSend müssen durch SL bzw. TP ersetzt werden

Was bedeuten SL und TP? Wenn er Null ist, wie im obigen Code, ist alles korrekt. Es sollte ein Fehler erzeugt werden

 

Die Stopps werden der globalen Variablen g_Level_new entnommen, die wie folgt berechnet wird: g_Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL )

Grund der Beschwerde: