Fehler, Irrtümer, Fragen - Seite 1488

 
Aleksandr Novikov:

Wird es eine Antwort geben, oder wird sie wie üblich als unbequeme Frage in die Geschichte eingehen?

Oder kann die Verwaltung nur die Reihenfolge der Links im oberen Menü ändern?

Das vierte Forum wird seit langem nicht mehr unterstützt, dient aber nach wie vor als Referenzmaterial. Zumindest wurde diese Entscheidung von der Verwaltung geäußert.
 
Alexey Kozitsyn:

Obwohl ich nicht zur Verwaltung gehöre, haben Sie auch meine Frage nicht beantwortet...

Ja, ich habe mich unter meinem Account im Forum angemeldet und was bringt das? Nur um Ihre Neugierde zu befriedigen?


Artyom Trishkin:
Das vierte Forum wird schon seit langem nicht mehr unterstützt, wurde aber als Referenzmaterial erhalten. Zumindest wurde diese Entscheidung von der Verwaltung geäußert.

Dann hätten sie es geschlossen und alles in das mql5-Forum umgeleitet. Warum sollte er kastriert werden?

Die Menschen nutzen sie weiterhin und kommunizieren mit ihr, was bedeutet, dass sie gebraucht wird und ihre Funktionalität beibehalten werden sollte!

Es zeigt sich also, dass wie immer die Nutzer und ihre Meinung ignoriert werden und alles einseitig entschieden wird.

 
Aleksandr Novikov:

Ja, ich habe mich unter meinem Account im Forum angemeldet und was bringt das? Nur um Ihre Neugierde zu befriedigen?

Woher soll ich wissen, dass Sie vielleicht ein Sternchen sehen wollen, ohne sich in Ihr Konto einzuloggen? Dann ist es logisch, dass Sie es dort nicht sehen werden.
 
Aleksandr Novikov:

Ja, ich habe mich unter meinem Account im Forum angemeldet und was bringt das? Wird es nur Ihre Neugierde befriedigen?


Warum also nicht schließen und in das mql5-Forum umleiten? Warum wollen Sie ihn kastrieren?

Die Menschen nutzen sie immer noch und kommunizieren mit ihr, was bedeutet, dass sie gebraucht wird und ihre Funktionalität beibehalten werden sollte!

Aber es stellt sich heraus, dass wie immer die Nutzer und ihre Meinung ignoriert werden und alles einseitig entschieden wird.

Das ist genau der Grund, warum Sie vor etwa einem Jahr nicht gefragt wurden, als die Entscheidung getroffen wurde, das vierte Forum nicht mehr zu unterstützen. Gerade weil es dort eine Menge nützlicher Informationen gibt, wurde sie nicht getötet - nutzen Sie sie. Aber als Referenz.
 
Andrey Voytenko:

Über die Initialisierung. Ist es möglich, es so zu schreiben?

...

Wie auch immer, meine bevorzugte Initialisierung über ={0} mit Strings funktioniert nicht. Das ist eine Schande.

Danke für den Beitrag, Fehler behoben. Der Fix wird in der nächsten Build enthalten sein.
 

Frage zu MT4 .

Guten Tag. Mit einem Problem bei der Definition der Losgröße konfrontiert. Hier ist der Code.

Speziell auf Alpari. Speziell für USD-JPY. Es sollte die Daten zu den Aufträgen auf dem Chart ausgeben, aber .....für USD-JPY kann den korrekten Wert nicht anzeigen! Ich interessiere mich für die Daten aus dem Array!

Was kann ich zusätzlich tun?

#property version "1.00"
#property strict
#property indicator_chart_window
double Mas_Ord_Old[1000][19];
double Mas_Ord_New[1000][19];
double Mas_Tip[6];
string Mas_tip[6];
extern int FontSize=12;
extern color TextColor=clrIvory;
extern color TextColor1=clrGray;
extern color TextColor2=clrRed;
extern color TextColor3=clrYellow;
extern int X=20;
extern int Y=15;
int n;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Terminal();
//---
Comment(" пример неправильного лота ");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
DeleteLabel();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
Terminal();
int shift=15;
DeleteLabel();
n=13;
double proffit=0;
double pro=0;
double stloss=0;
double los=0;
int a9=(int)NormalizeDouble( Mas_Ord_Old [0][10],0);//MathIsValidNumber
//for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
for(int cnt=a9-1;cnt>=0;cnt--)
{
//.. и наша вал.пара
double a0= Mas_Ord_Old [cnt][0]; // OrderTicket(); I // Тикет ордера
double a1= Mas_Ord_Old [cnt][1]; // OrderOpenPrice(); D // Курс открытия орд
double a2= Mas_Ord_Old [cnt][2]; // OrderLots(); D // Количество лотов !!!!!!!!!!!!!!!!
double a3= Mas_Ord_Old [cnt][3]; // OrderTakeProfit(); D // Курс ТР
double a4= Mas_Ord_Old [cnt][4]; // OrderSwap(); D // Своп
double a5= Mas_Ord_Old [cnt][5]; // OrderStopLoss(); D // Курс SL
double a6= Mas_Ord_Old [cnt][6]; // OrderType(); I // Тип ордера
double a7= Mas_Ord_Old [cnt][7]; // OrderMagicNumber(); I // Магическое число
double a8= Mas_Ord_Old [cnt][8]; //
double Aa2= (double)((NormalizeDouble( a2,2))*100);
double Aaa2=(double)((NormalizeDouble( Aa2,2))/100);
// Print("2- OrderLots= ",Aa2," OrderType= ",Aaa2," OrderMagicNumber= ",a7," Ciomment= ",a8," кол-во = ",a0);
string text=StringConcatenate(" Тикет= Опен= ",a1," ЛОТ!!!= ",a2," ЛОТ 2= ",Aa2," 4= ",a4," 5= ",a5," 6= ",a6," 7= ",a7," 8= ",a8);
CreateLabel(StringConcatenate("Label_",n),text,X,Y+n*shift,clrYellow);
}

//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
// double Mas_Ord_Old[1000][9];
// double Mas_Ord_New[1000][9];
// double Mas_Tip[6];
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool Terminal()
{
int Qnt=0; // Счётчик количества ордеров

//--------------------------------------------------------------- 3 --
ArrayCopy(Mas_Ord_Old, Mas_Ord_New,0,0,WHOLE_ARRAY);// Сохраняем предыдущую историю
Qnt=0; // Обнуление счётчика ордеров
ArrayInitialize(Mas_Ord_New,0); // Обнуление массива
// ArrayInitialize(Mas_Tip, 0); // Обнуление массива
//--------------------------------------------------------------- 4 --
for(int i=OrdersTotal()-1; i>=0; i--) // По рыночн. и отлож. ордерам
{ //.. и наша вал.пара && (OrderSymbol()==Symbol())
if((OrderSelect(i,SELECT_BY_POS)==true) )
{
//------------------------------------------------------ 5 --
Mas_Ord_New[Qnt][0]=OrderTicket(); // Курс открытия орд
Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Курс открытия орд
Mas_Ord_New[Qnt][2]= OrderLots(); // Курс SL
Mas_Ord_New[Qnt][3]=OrderTakeProfit(); // Курс ТР
Mas_Ord_New[Qnt][4]=OrderSwap(); // Номер ордера
Mas_Ord_New[Qnt][5]=OrderStopLoss(); // Количество лотов
// Mas_Tip[OrderType()]++; // Кол. ордеров типа
Mas_Ord_New[Qnt][6]=OrderType(); // Тип ордера
Mas_Ord_New[Qnt][7]=OrderMagicNumber(); // Магическое число
if (OrderComment()=="")
Mas_Ord_New[Qnt][8]=0; // Если нет коммент
else
Mas_Ord_New[Qnt][8]=1; // Если есть коммент
Qnt++; // Колич. ордеров
//------------------------------------------------------ 6 --
}
}
Mas_Ord_New[0][10]=Qnt; // Колич. ордеров
//--------------------------------------------------------------- 7 --
return 0;
}
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//+--------------------------------------------------------------------+
void CreateLabel(string name, string text,int x, int y, color c) //
{ //
ObjectCreate(name, OBJ_LABEL,0,0,0); //
ObjectSetText(name,text,FontSize,"Times New Roman",TextColor); //
ObjectSet(name,OBJPROP_CORNER,0
); //
ObjectSet(name,OBJPROP_XDISTANCE,x); //
ObjectSet(name,OBJPROP_YDISTANCE,y); //
ObjectSet(name,OBJPROP_COLOR,c); //
n++; //
} //
void DeleteLabel() //
{ //
for(int i=ObjectsTotal();i>=0;i--) //
{ //
if(StringSubstr(ObjectName(i),0,6)=="Label_") //
ObjectDelete(ObjectName(i)); //
} //
} //
//+--------------------------------------------------------------------+
 
Sergey Vedmanov:

Frage zu MT4 .

Guten Tag. Mit einem Problem bei der Definition der Losgröße konfrontiert. Hier ist der Code.

Speziell auf Alpari. Speziell für USD-JPY. Es sollte die Daten zu den Aufträgen auf dem Chart ausgeben, aber .....für USD-JPY kann den korrekten Wert nicht anzeigen! Ich interessiere mich für die Daten aus dem Array!

Was kann ich zusätzlich tun?

Aber es funktioniert in Kovalevs Anleitung. Was hindert mich daran, sie korrekt zu kopieren und an die neuen Anforderungen anzupassen?
 
Artyom Trishkin:
Aber die Anleitung von Kovalev funktioniert immer noch. Was hindert uns daran, sie korrekt zu kopieren und an die neuen Anforderungen anzupassen?

Ich werde Sie überraschen, aber es funktioniert auch in anderen Einkaufszentren. Wenn Sie den Beitrag von Anfang an aufmerksam lesen...

Speziell auf Alpari. Speziell für USD-JPY.

Was können wir zusätzlich tun?

 
Sergey Vedmanov:

Ich werde Sie überraschen, aber es funktioniert auch in anderen Einkaufszentren. Wenn Sie den Beitrag von Anfang an aufmerksam lesen...

Speziell auf Alpari. Speziell für USD-JPY.

Was Sie zusätzlich tun können

... ... in anderen Handelszentren? :)

Ich habe Ihre Angaben gesehen. Ich habe nicht darin herumgestochert, weil ich es für überflüssig halte. All diese Kovalev-Terminals...

Aber in Ihrem Code sehe ich eine Diskrepanz zwischen gespeicherten Daten und der Beschreibung dieser Daten in den Kommentaren - ist schon verwirrend.

Weiter:

string text=StringConcatenate(" Тикет= Опен= ",a1," ЛОТ!!!= ",a2," ЛОТ 2= ",Aa2," 4= ",a4," 5= ",a5," 6= ",a6," 7= ",a7," 8= ",a8);

Ihre Partie wird aus der Variablen a2 gedruckt, aber was wird dort gespeichert? Hier ist sie:

Mas_Ord_New[Qnt][2]= OrderLots(); // Курс SL

Oder vielleicht sollten wir es mit DoubleToString() ausgeben?

Und Sie normieren das Los falsch. Sie benötigen eine Funktion zur Losnormalisierung. Ich werde nicht danach suchen. Sie können bei Kim danach suchen - es wird Ihnen genügen.

 
Artyom Trishkin:

... in anderen Einkaufszentren? :)

Ich habe Ihre Angaben gesehen. Ich habe nicht darin herumgestochert, weil ich es für überflüssig halte. All diese Kovalev-Terminals...

Aber in Ihrem Code sehe ich eine Diskrepanz zwischen gespeicherten Daten und der Beschreibung dieser Daten in den Kommentaren - das ist schon verwirrend.

Weiter:

Ihre Partie wird aus der Variablen a2 gedruckt, aber was wird dort gespeichert? Hier ist sie:

Oder vielleicht sollten wir es durch DoubleToString() ausgeben?

Die Partie ist falsch normalisiert. Wir brauchen eine Funktion für die Losnormalisierung. Ich werde nicht danach suchen. Sie können es bei Kim suchen - es wird für Sie funktionieren.

Ich habe es gefunden. Ich danke Ihnen. Aber damit ist die Aufgabe noch nicht gelöst.

Bei anderen CAs und mit diesem Code funktioniert es einwandfrei.

Es funktioniert nicht richtig mit Kims Funktion.

Sie wird über DoubleToString() korrekt gelesen, aber nicht korrekt berechnet. Ich werde nicht durch DoubleToString() zählen. Wenn ich dorthin und zurück gehe, werden Saiten korrekt übertragen, aber Verdopplungen von Saiten sind wieder falsch.

Das Problem liegt in Alpari und wir brauchen eine Krücke, um es zu umgehen.

USD-SEK zeigt fälschlicherweise den Eröffnungskurs eines anderen Paares an.

#property version   "1.00"
#property strict
#property indicator_chart_window
  double Mas_Ord_Old[1000][19];
  double Mas_Ord_New[1000][19];
  double Mas_Tip[6];
  string Mas_tip[6];
extern int FontSize=12;
extern color TextColor=clrIvory;
extern color TextColor1=clrGray;
extern color TextColor2=clrRed;
extern color TextColor3=clrYellow;
extern int X=20;
extern int Y=15;
int n;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   Terminal();
//---
Comment(" пример неправильного лота ");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
 DeleteLabel();
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
Terminal();
int shift=15;
DeleteLabel();
n=13;
double proffit=0;
double pro=0;
double stloss=0;
double los=0;
      int a9=(int)NormalizeDouble( Mas_Ord_Old [0][10],0);//MathIsValidNumber
//for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
for(int cnt=a9-1;cnt>=0;cnt--)
 {
                                 //.. и наша вал.пара
    double a0= Mas_Ord_Old [cnt][0];  //  OrderTicket();      I // Тикет ордера
    double a1= Mas_Ord_Old [cnt][1];  //  OrderOpenPrice();   D // Курс открытия орд
    string a2= DoubleToString(Mas_Ord_Old [cnt][2],2);  //  OrderLots();        D // Количество лотов !!!!!!!!!!!!!!!!
    double a3= Mas_Ord_Old [cnt][3];  //  OrderTakeProfit();  D // Курс ТР
    double a4= Mas_Ord_Old [cnt][4];  //  OrderSwap();        D // Своп
    double a5= Mas_Ord_Old [cnt][5];  //  OrderStopLoss();    D // Курс SL
    double a6= Mas_Ord_Old [cnt][6];  //  OrderType();        I // Тип ордера
    double a7= Mas_Ord_Old [cnt][7];  //  OrderMagicNumber(); I // Магическое число 
    double a8= Mas_Ord_Old [cnt][8];  //  
    double Aa2= (double)(StringToDouble(a2));
    double Aaa2=(double)((NormalizeDouble( Aa2,2))/100); 
   //   Print("2-  OrderLots= ",Aa2," OrderType= ",Aaa2," OrderMagicNumber= ",a7," Ciomment= ",a8," кол-во = ",a0);
    string text=StringConcatenate(" Опен= ",a1," ЛОТ string= ",a2," ЛОТ double= ",Aa2 );
    CreateLabel(StringConcatenate("Label_",n),text,X,Y+n*shift,clrYellow);
  }
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//  double Mas_Ord_Old[1000][9];
//  double Mas_Ord_New[1000][9];
//  double Mas_Tip[6];
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  bool Terminal()
  {
   int Qnt=0;                          // Счётчик количества ордеров
 
//--------------------------------------------------------------- 3 --
   ArrayCopy(Mas_Ord_Old, Mas_Ord_New,0,0,WHOLE_ARRAY);// Сохраняем предыдущую историю
   Qnt=0;                              // Обнуление счётчика ордеров
   ArrayInitialize(Mas_Ord_New,0);     // Обнуление массива
 //  ArrayInitialize(Mas_Tip,    0);     // Обнуление массива
//--------------------------------------------------------------- 4 --
   for(int i=OrdersTotal()-1; i>=0; i--) // По рыночн. и отлож. ордерам
     {                                //.. и наша вал.пара && (OrderSymbol()==Symbol())
      if((OrderSelect(i,SELECT_BY_POS)==true) )              
        {
         //------------------------------------------------------ 5 --
         Mas_Ord_New[Qnt][0]=OrderTicket();       // Курс открытия орд
         Mas_Ord_New[Qnt][1]=OrderOpenPrice();    // Курс открытия орд
         Mas_Ord_New[Qnt][2]=NormalizeLot( OrderLots(),0,Symbol());     // Курс SL
         Mas_Ord_New[Qnt][3]=OrderTakeProfit();   // Курс ТР
         Mas_Ord_New[Qnt][4]=OrderSwap();         // Номер ордера
         Mas_Ord_New[Qnt][5]=OrderStopLoss();        // Количество лотов
       //  Mas_Tip[OrderType()]++;                // Кол. ордеров типа
         Mas_Ord_New[Qnt][6]=OrderType();         // Тип ордера
         Mas_Ord_New[Qnt][7]=OrderMagicNumber();  // Магическое число 
         if (OrderComment()=="")
            Mas_Ord_New[Qnt][8]=0;                // Если нет коммент
         else
            Mas_Ord_New[Qnt][8]=1;                // Если есть коммент
          Qnt++;                                   // Колич. ордеров
        //------------------------------------------------------ 6 --
        }
     }
   Mas_Ord_New[0][10]=Qnt;                         // Колич. ордеров
//--------------------------------------------------------------- 7 --
   return 0;
  }
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//+----------------------------------------------------------------------------+
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);
//+----------------------------------------------------------------------------+
}
//+--------------------------------------------------------------------+
void CreateLabel(string name, string text,int x, int y, color c)              // 
   {                                                                 //
   ObjectCreate(name, OBJ_LABEL,0,0,0);                              //
   ObjectSetText(name,text,FontSize,"Times New Roman",TextColor);    //
   ObjectSet(name,OBJPROP_CORNER,0
   );                                 //
   ObjectSet(name,OBJPROP_XDISTANCE,x);                              //
   ObjectSet(name,OBJPROP_YDISTANCE,y);                              //
   ObjectSet(name,OBJPROP_COLOR,c);                              //
   n++;                                                              //
   }                                                                 //
void DeleteLabel()                                                   //
   {                                                                 //
   for(int i=ObjectsTotal();i>=0;i--)                                //
      {                                                              //
      if(StringSubstr(ObjectName(i),0,6)=="Label_")                  //
      ObjectDelete(ObjectName(i));                                   //
      }                                                              //
   }                                                                 //
//+--------------------------------------------------------------------+