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

 
Vinin:

Ich danke Ihnen.
 
AlexSTAL:
Warnungen

Meine Muttersprache ist Ukrainisch. Aber ich danke Ihnen für Ihre Aufmerksamkeit.
 

Hilfe! Wenn ich 2 Anhänger eingestellt habe und einer davon durch Gewinnmitnahme geschlossen wird, muss der 2. gelöscht werden. Wie schreibe ich ihn? Wo liegt der Fehler im Code?

int pos;
for (pos=0; pos<OrdersTotal(); pos++)
{
if (OrderSelect(pos, SELECT_BY_POS))
{
if (OrderClosePrice() >= OrderTakeProfit())
{
int i;
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderDelete(OrderTicket()))
{
Print("Ордер удален");
       }
      }
     }
    }
break;
   }
  }
 }
return(0);
}
 

Guten Abend (ich habe vergessen, in früheren Beiträgen Hallo zu sagen). Können Sie mir sagen, welche Funktion ich für die folgenden Aufgaben verwenden soll? Im Expert Advisor wird ein Auftrag durch den Indikator auf der aktuellen Kerze eröffnet (lassen Sie es Nummer = 9 sein). Wenn nach der Eröffnung zu bestellen, es (der Indikator) neu zu zeichnen (und nach dem Schließen Kerze 9 nicht erschienen), dann muss ich NACH der Schließung Kerze 9 um geschlossen.

 

Es gibt Eingabeparameter:

bool Mart - wenn wahr, bedeutet dies, dass ein geschlossener Auftrag auf einem Stopp vorliegt und daher eine Verdopplung durchgeführt wird.

TradeInf - Handelserlaubnis, wenn wahr, bedeutet dies, dass keine gehandelten Aufträge vorliegen und wir handeln dürfen)

Es gibt den folgenden Code:
if (Mart == true && TradeInf==true)
{
Alert("double the lot");
LotS=NormalizeDouble(LotS*martin,2);
Alert("lot size",LotS);
}
if (Mart == false && TradeInf==true)
{
Alert("Reset lot");
LotS=lot;
}

Dann wird in den OpenOrder-Befehlen die Losgröße = LotS.

Wenn also ein Los gefunden wird, das durch ein Los geschlossen wurde, wird die Losgröße zu -9315605757223323600
. Woran liegt das?

 

Hallo, ich berechne ein Los aus einem Bilanzwert nach einem anderen Prinzip...

Ich komme auf eine Zahl wie 0,2345. Wie kann ich das Doppelte abschneiden, ohne es zu runden?

bis zu einer Ziffer - 0,2

zweistellig - 0,23

auf drei - 0,234 und so weiter...

 
akacuk21:

Hallo, ich berechne ein Los aus einem Bilanzwert nach einem anderen Prinzip...

Am Ende erhalte ich eine Zahl wie 0,2345. Wie kann ich das Doppelte abschneiden, ohne zu runden?

bis zu einer Ziffer - 0,2

zweistellig - 0,23

auf drei - 0,234 usw...


double lot = NormalizeDouble(LOT,2)

Los - für die Auftragserteilung

LOT - Formel für die Auftragsberechnung

"2" - Rundung auf 2 Dezimalstellen.

 
Vielen Dank für die Antwort, aber im Falle von NormalizeDouble, eine Zahl wie 0,29 gerundet auf eine Ziffer wird 0,3 und ich brauche es zu 0,2 sein
 
Das ist gegen die Regeln der Rundung, also warten wir ab, was die Ältesten zu sagen haben.
 
Sys15975382:
Es verstößt gegen die Regeln der Rundung, warten wir ab, was die älteren Genossen zu sagen haben.

Äh... Meine Herren. So etwas kann man nicht normalisieren... :) Hier ist eine kleine Hilfe:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}