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

 
Vinin:

Victor, werfen Sie bitte einen Blick auf Ihre persönliche Nachricht.
 
glasha:
Victor, werfen Sie bitte einen Blick auf Ihre persönliche Nachricht.

Gesehen
 
dimon74:

OrderSend() wird bei jedem Tick ausgelöst (so wie ich es verstehe). Um das Problem zu beseitigen, setzen Sie eine Variable vor die Startfunktion, zum Beispiel int H=0.

Ferner den Code:

..........

wenn ( H==0)

{

OrderSend(blah blah blah);

}

H=1;

Und Algebra ist nicht nötig. Und OrdersTotal() sollte besser nicht zur Begrenzung verwendet werden.


Ich verstehe, es funktioniert bei mir, ich meine, ich muss 1 Auftrag öffnen und er wird nicht beim nächsten Tick geöffnet

Der zweite Auftrag wird nur dann benötigt, wenn der erste Auftrag abgeschlossen ist.

 

Wenn ich mich nicht irre, muss es so sein?

int H=0;

int F=AufträgeGesamt();

..........

wenn(F<1)

{

wenn ( H==0)

{

OrderSend(blah blah blah);

}

H=1;}

 
gheka:

Wenn ich mich nicht irre, muss es so sein?

int H=0;

int F=AufträgeGesamt();

..........

wenn(F<1)

{

wenn ( H==0)

{

OrderSend(blah blah blah);

}

H=1;}

total = CountTrades();
if (total < 1) {
ticket = OrderSend
}

int CountTrades() {
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
}
 
gheka:


Ich verstehe, es funktioniert bei mir, ich meine, ich muss 1 Auftrag öffnen und er wird nicht beim nächsten Tick geöffnet

der zweite Auftrag muss nur dann geöffnet werden, wenn der erste Auftrag geschlossen wird

Sie sollten hier nachsehen.
 

Guten Tag zusammen. Ich bin nicht sehr gut im Schreiben von EAs, ich habe versucht, dieses Zeug zu lernen, aber ich habe gerade erst angefangen und es ist ziemlich schwierig für mich. Ich möchte einen EA schreiben, der Trades eröffnet, wenn die Preise einen gleitenden Durchschnitt kreuzen, und sie bei der entgegengesetzten Kreuzung schließt, entweder mit Stop Loss oder Trailing Stop. Ich habe ein Beispiel für einen solchen EA gefunden, aber es gibt keinen Trailing-Stop oder Stop-Loss, und die Geschäfte werden einfach beim Crossing eröffnet und geschlossen. Dafür habe ich nicht genug Wissen. Ich möchte jemanden bitten, mir zu helfen, wo ich den Trailing-Stop und den Stoploss setzen soll und wie ich das anstellen kann:

#eigentum copyright "Jake Sunders"

#property link "feloq@mail.ru"



#define STATE_SQUARE 0

#define STATE_LONG 1

#define STATE_SHORT 2



//---- Eingabeparameter

extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop=50;
extern double StopLoss= 50;


//---- globale Variablen

int CurrentState;

int MyOrderTicket;

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])

CurrentState = STATE_SHORT;

sonst CurrentState = STATE_LONG;

MyOrderTicket = 0;
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
Doppel-MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //der gleitende Durchschnitt ist höher als der Schlusskurs
{
CurrentState = STATE_SHORT;
//zum Verkaufen wenden
//-- Position schließen, falls geöffnet
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Fehler beim Schließen der Position: ", err);
zurück(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- Long-Position wurde erfolgreich geschlossen
//--- Eröffnen wir jetzt eine Verkaufsposition
//--- Prüfung auf freie Mittel
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MeinBestellTicket<0)
{
err = GetLastError();
Print("Fehler beim Öffnen der Position: ", err);
MyOrderTicket = 0;
}
}
}
sonst
{
if (MA < Close[1]) // gleitender Durchschnitt unter Schlusskurs
{
CurrentState = STATE_LONG;

//umgekehrt zu kaufen
//-- Position schließen, falls geöffnet
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Fehler beim Schließen der Position: ", err);
zurück(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- Short-Position wurde erfolgreich geschlossen
//--- Eröffnen wir jetzt eine Kaufposition
//--- Prüfung auf freie Mittel
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MeinBestellTicket<0)
{
err = GetLastError();
Print("Fehler beim Öffnen der Position: ", err);
MyOrderTicket = 0;
}
}
}
//----
zurück(0);
}

 

Leute, bitte um Rat! Wie eröffne ich eine Position und schließe sie bei Ablauf einer Kerze oder von Candlesticks? Das heißt, er öffnet sich bei der Eröffnung einer neuen Kerze und schließt sich

Wie übernehme ich die Indikatorwerte am Ende einer Kerze?

 
gheka:

Ich habe Kauf- und Verkaufsaufträge, die zum gleichen Preis für fast 50-100 Positionen eröffnet werden,

wie kann ich nur eine Bestellung öffnen, wenn ich mich nicht irre - OrdersTotal()

Wenn ja, wie sollte ich sie verwenden und wo sollte ich sie platzieren? Ich habe das Gefühl, dass ich ohne diese Funktion die gesamte Algebra eingeben muss


Falsche Bedingungen für den Abschluss von Geschäften, siehe Beispiel für zwei MAs.
 
Superjake:

Guten Tag zusammen. Ich bin nicht sehr gut im Schreiben von EAs, ich habe versucht, dieses Zeug zu lernen, aber ich habe gerade erst angefangen und es ist ziemlich schwierig für mich. Ich möchte einen EA schreiben, der Trades eröffnet, wenn die Preise einen gleitenden Durchschnitt kreuzen, und sie bei der entgegengesetzten Kreuzung schließt, entweder mit Stop Loss oder Trailing Stop. Ich habe ein Beispiel für einen solchen EA gefunden, aber es gibt keinen Trailing-Stop oder Stop-Loss, und die Geschäfte werden einfach beim Crossing eröffnet und geschlossen. Dafür habe ich nicht genug Wissen. Ich möchte jemanden bitten, mir zu helfen, wo ich Trailing-Stop und Stoploss setzen kann und wie das funktioniert:

#eigentum copyright "Jake Sunders"

#property link "feloq@mail.ru"



#define STATE_SQUARE 0

#define STATE_LONG 1

#define STATE_SHORT 2



//---- Eingabeparameter

extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop=50;
extern double StopLoss= 50;


//---- globale Variablen

int CurrentState;

int MyOrderTicket;

//+------------------------------------------------------------------+

//| Experten-Initialisierungsfunktion |

//+------------------------------------------------------------------+

int init()

{

//----

if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])

CurrentState = STATE_SHORT;

sonst CurrentState = STATE_LONG;

MyOrderTicket = 0;
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
Doppel-MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
if ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //der gleitende Durchschnitt ist höher als der Schlusskurs
{
CurrentState = STATE_SHORT;
//zum Verkaufen wenden
//-- Position schließen, falls geöffnet
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Fehler beim Schließen der Position: ", err);
zurück(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- Long-Position wurde erfolgreich geschlossen
//--- Eröffnen wir jetzt eine Verkaufsposition
//--- Prüfung auf freie Mittel
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MeinBestellTicket<0)
{
err = GetLastError();
Print("Fehler beim Öffnen der Position: ", err);
MyOrderTicket = 0;
}
}
}
sonst
{
if (MA < Close[1]) // gleitender Durchschnitt unter Schlusskurs
{
CurrentState = STATE_LONG;

//umgekehrt zu kaufen
//-- Position schließen, falls geöffnet
if ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Fehler beim Schließen der Position: ", err);
zurück(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- Short-Position wurde erfolgreich geschlossen
//--- Eröffnen wir jetzt eine Kaufposition
//--- Prüfung auf freie Mittel
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, CLR_NONE);
if (MeinBestellTicket<0)
{
err = GetLastError();
Print("Fehler beim Öffnen der Position: ", err);
MyOrderTicket = 0;
}
}
}
//----
zurück(0);
}


Sehen Sie sich dieses Beispiel an