Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 461

 
wolfovik:

Helfen Sie mit, ein Problem zu lösen!

Der EA im Tester bleibt bei der Verwendung der ICustom-Funktion hängen. Gibt es eine Lösung für dieses Problem?

Außerdem gibt es im Strategy Tester einen konstanten Fehler PB Trade EURUSD,H1: OrderSend error 130

Obwohl die Haltestellen bei 300 Punkten liegen!

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

So funktioniert das nicht!

RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

Was habe ich falsch gemacht?


 
Dmitry01110:
Hallo! Könnten Sie mir bitte sagen, wie ich eine mit der Funktion FileOpen erstellte Datei bearbeiten kann, z.B. ein Byte an der aktuellen Position löschen und ein anderes an seiner Stelle einfügen!


Ich versuche auch, etwas Ähnliches zu tun.

Es gibt eine *.csv-Datei mit nur einer Spalte, d. h. die Ziffern darin stehen untereinander. Ich versuche, es so zu gestalten, dass jedes Mal, wenn eine Ziffer verwendet wird, ein Symbol daneben erscheint, das anzeigt, dass diese Ziffer bereits vom EA verwendet wurde.

Sie können eine *.csv-Datei mit zwei Spalten erstellen - [NUMBER]; [SIGN].

 
wolfovik:

Auch im Tester gibt es einen konstanten Fehler PB Trade EURUSD,H1: OrderSend error 130

Obwohl die Stopps bei 300 Pips liegen!

So funktioniert das nicht!

Was habe ich falsch gemacht?


Kalkulierte Preise im Handelsauftrag müssen auf Digits normalisiert werden:

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,NormalizeDouble(Bid-300*Point,Digits),NormalizeDouble(Bid+300*Point,Digits));

Sie müssen auch die Gültigkeit der Stop-Order-Werte anhand der StopLevel-Anforderungen überprüfen:

input int  StopLoss    =  300;   // Значение Stop Loss в пунктах
input int  TakeProfit  =  300;   // Значение Take Profit в пунктах
int   level=0, spread=0;
//+------------------------------------------------------------------+
//|   Старт                                                          |
//+------------------------------------------------------------------+
void OnTick() {
   level=MarketInfo(Symbol(),MODE_STOPLEVEL);
   spread=MarketInfo(Symbol(),MODE_SPREAD);
   if(level==0) level=spread*2;
//---
   int    ticket=0;
   double sl=0, tp=0;
   if(StopLoss>0) sl=NormalizeDouble(MathMin(Bid-StopLoss*Point,Bid-(level+1)*Point),Digits);
   if(TakeProfit>0) tp=NormalizeDouble(MathMax(Bid+TakeProfit*Point,Bid+(level+1)*Point),Digits);
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,sl,tp);
   return;
}

Für Buy, etwa wie folgt

 
Dmitry01110:
Hallo, könnten Sie mir bitte sagen, wie ich eine mit der Funktion FileOpen erstellte Datei bearbeiten kann, z.B. ein Byte an der aktuellen Position löschen und ein anderes an seiner Stelle einfügen!
Sie rufen den gesamten Text der Datei in einer String-Variablen auf, bearbeiten ihn als einfache Variable, rufen dann die Datei nur schreibend auf und geben die Variable zurück.
 
Roger:
Sie rufen den gesamten Text einer Datei in einer String-Variablen auf, bearbeiten ihn als einfache Variable, rufen dann die Datei schreibgeschützt auf und geben die Variable zurück.

Was passiert, wenn die Anzahl der Zeichen in der Datei die maximale Größe der Zeichen in der String-Variablen überschreitet?
 
Ich habe es ein wenig herausgefunden! Um einen Wert an einer bestimmten Dateiposition zu ersetzen, müssen Sie lediglich mit FileSeek einen Zeiger auf das vorherige Byte setzen und dann z. B. mit FileWriteInteger einen neuen Wert dorthin schreiben, der den alten überschreibt. Das Wichtigste ist, dass der alte und der neue Wert die gleiche Größe haben, z. B. LONG_VALUE für int.
 
Ich habe mein Terminal heute aktualisieren lassen. Jetzt kann er die Indikatoren nicht mehr sehen... Was ist zu tun und habe ich es richtig formuliert? In demselben Ordner (Pfad) wie zuvor.
 

for(int l = StringLen(tfs)-1; l >= 0; l--) { int char = StringGetChar(tfs,l); }

Es gibt einen Fehler im Code. Warum wird "char" vereidigt? Wie und wodurch kann ich sie ersetzen?

 
artmedia70:
Was passiert, wenn die Anzahl der Zeichen in der Datei die maximale Größe der Zeichen in der String-Variablen überschreitet?

Es gibt keine Begrenzung für die String-Variable. Oder besser gesagt, es gibt sie, aber sie ist sehr groß. Für MT4 aus dem 529-Build sind es 2147483647 Zeichen und 2 mal weniger, wenn MT4 ein 32-Bit-Betriebssystem hat. Und das ist nicht immer der Fall. Es gibt verschiedene Schlüssel und PAE.

Dmitry01110:
Ich habe es ein wenig herausgefunden! Um einen Wert an einer bestimmten Dateiposition zu ersetzen, müssen Sie lediglich mit FileSeek einen Zeiger auf das vorherige Byte setzen und dann z. B. mit FileWriteInteger den neuen Wert dorthin schreiben, der den alten überschreibt. Das Wichtigste ist, dass der alte und der neue Wert die gleiche Größe haben müssen, z. B. LONG_VALUE für int.
Ja, und bei CSV muss die Anzahl der Zeichen übereinstimmen.

Zolotai:

for(int l = StringLen(tfs)-1; l >= 0; l--) { int nChar = StringGetChar(tfs,l); }

Es gibt einen Fehler im Code. Warum wird "char" vereidigt? Wie und wodurch kann ich sie ersetzen?

 
cp