Errori, bug, domande - pagina 1488

 
Aleksandr Novikov:

Ci sarà una risposta o passerà alla storia come una domanda scomoda come al solito?

O l'amministrazione può solo cambiare la sequenza dei link nel menu superiore?

Il quarto forum è stato a lungo non supportato, ma come materiale di riferimento rimane. Almeno questa decisione è stata espressa dall'amministrazione.
 
Alexey Kozitsyn:

Anche se non sono dell'amministrazione, non hai nemmeno risposto alla mia domanda...

Sì, ho fatto il login nel forum con il mio account e cosa ti ha portato? Solo per soddisfare la tua curiosità?


Artyom Trishkin:
Il quarto forum non è stato supportato per molto tempo, ma è stato conservato come materiale di riferimento. Almeno questa decisione è stata espressa dall'amministrazione.

Quindi l'avrebbero chiuso e reindirizzato tutto al forum mql5. Perché castrarlo?

La gente continua a usarlo e a comunicare, il che significa che è necessario e la sua funzionalità deve essere mantenuta!

Così si scopre che, come sempre, gli utenti e la loro opinione sono ignorati e tutto viene deciso unilateralmente.

 
Aleksandr Novikov:

Sì, ho fatto il login nel forum con il mio account e questo cosa fa per voi? Solo per soddisfare la tua curiosità?

Che ne so, forse vuoi vedere un asterisco senza accedere al tuo account? Allora è logico che non lo vedrete lì.
 
Aleksandr Novikov:

Sì, ho fatto il login nel forum con il mio account e questo cosa fa per voi? Soddisferà solo la tua curiosità?


Allora perché non chiuderlo e reindirizzarlo al forum mql5? Perché volete castrarlo?

La gente lo usa ancora e comunica, il che significa che è necessario e la sua funzionalità deve essere mantenuta!

Ma si scopre che, come sempre, gli utenti e la loro opinione vengono ignorati e tutto viene deciso unilateralmente.

Questo è esattamente il motivo per cui non ti è stato chiesto circa un anno fa, quando hanno preso la decisione di smettere di sostenere il quarto forum. Proprio perché c'è un sacco di informazioni utili, non è stato ucciso - usalo. Ma come riferimento.
 
Andrey Voytenko:

Riguardo all'inizializzazione. È possibile scriverlo in questo modo?

...

Comunque, la mia inizializzazione preferita tramite ={0} con le stringhe non funziona. È un peccato.

Grazie per il post, bug risolto. La correzione sarà inclusa nella prossima build.
 

Domanda su MT4 .

Buon pomeriggio. Di fronte a un problema di definizione delle dimensioni del lotto. Ecco il codice.

In particolare su Alpari. In particolare per USD-JPY. Dovrebbe emettere i dati sugli ordini al grafico, ma .....per USD-JPY non può mostrare il valore corretto! Sono interessato ai dati dell'array!

Cosa posso fare in più?

#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:

Domanda su MT4 .

Buon pomeriggio. Di fronte a un problema di definizione delle dimensioni del lotto. Ecco il codice.

In particolare su Alpari. In particolare per USD-JPY. Dovrebbe emettere i dati sugli ordini al grafico, ma .....per USD-JPY non può mostrare il valore corretto! Sono interessato ai dati dell'array!

Cosa posso fare in più?

Ma funziona nel tutorial di Kovalev. Cosa mi impedisce di copiarlo correttamente e di adattarlo alle nuove esigenze?
 
Artyom Trishkin:
Ma il tutorial di Kovalev funziona ancora. Cosa ci impedisce di copiarlo correttamente e di adattarlo alle nuove esigenze?

Ti sorprenderò, ma funziona anche in altri centri commerciali. Se leggete attentamente il post dall'inizio...

In particolare su Alpari. In particolare su USD-JPY.

Cosa possiamo fare in più?

 
Sergey Vedmanov:

Ti sorprenderò, ma funziona anche in altri centri commerciali. Se leggete attentamente il post dall'inizio...

In particolare su Alpari. In particolare su USD-JPY.

Cosa si può fare in più?

... ... in altri centri commerciali? :)

Ho visto le vostre specifiche. Non ho curiosato perché penso che sia ridondante. Tutti quei terminali di Kovalev...

Ma nel tuo codice vedo una discrepanza tra i dati memorizzati e la descrizione di questi dati nei commenti - è già confuso.

Più in là:

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

il vostro lotto viene stampato dalla variabile a2, ma cosa ci salviamo? Ecco qui:

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

Forse dovremmo stamparlo usando DoubleToString()?

E state normalizzando il lotto in modo errato. Avete bisogno di una funzione per la normalizzazione dei lotti. Non lo cercherò. Potete cercarlo da Kim - farà al caso vostro.

 
Artyom Trishkin:

... in altri centri commerciali? :)

Ho visto le vostre specifiche. Non ho curiosato perché penso che sia tutto superfluo. Tutti quei terminali di Kovalev...

Ma nel tuo codice vedo una discrepanza tra i dati memorizzati e la descrizione di questi dati nei commenti - è già confuso.

Più in là:

il vostro lotto viene stampato dalla variabile a2, ma cosa ci salviamo? Ecco qui:

O forse dovremmo emetterlo attraverso DoubleToString()?

Il lotto è normalizzato in modo errato. Abbiamo bisogno di una funzione per la normalizzazione dei lotti. Non lo cercherò. Potete cercarlo in Kim's - funzionerà per voi.

Trovato. Grazie. Ma non risolve il compito in questione.

Funziona correttamente su altre CA e con questo codice.

Non funziona correttamente con la funzione di Kim.

Legge correttamente tramite DoubleToString() ma calcola in modo errato. Non conterò attraverso DoubleToString(). Se vado e torno, trasferisce le stringhe correttamente ma i raddoppi di stringhe sono di nuovo sbagliati.

Il problema è in Alpari e abbiamo bisogno di una stampella per aggirarlo.

USD-SEK visualizza erroneamente il prezzo di apertura su un'altra coppia.

#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));                                   //
      }                                                              //
   }                                                                 //
//+--------------------------------------------------------------------+