错误、漏洞、问题 - 页 1488

 
Aleksandr Novikov:

是否会有答案,还是会像往常一样作为一个不舒服的问题载入史册?

还是管理部门只能改变顶部菜单中的链接顺序?

第四个论坛早已不被支持,但作为参考材料仍然存在。至少这个决定是由政府发出的。
 
Alexey Kozitsyn:

尽管我不是行政部门的人,但你也没有回答我的问题......

是的,我用我的账户登录了论坛,这对你有什么好处?只是满足你的好奇心?


阿尔乔姆-特里什金
第四个论坛已经很久没有得到支持了,但它被保留下来作为参考材料。至少这个决定是由政府发出的。

所以他们会关闭它,把所有东西都转到mql5论坛。为什么要阉割它?

人们继续使用它并进行交流,这意味着它是被需要的,它的功能也应该被维护!

因此,事实证明,像往常一样,用户和他们的意见被忽略了,一切都由单方面决定。

 
Aleksandr Novikov:

是的,我用我的账户登录了论坛,这对你有什么作用?只是满足你的好奇心?

我怎么知道,也许你想在不登录账户的情况下看到一个星号?那么你不会在那里看到它是合乎逻辑的。
 
Aleksandr Novikov:

是的,我用我的账户登录了论坛,这对你有什么好处?它是否只是满足你的好奇心?


那么,为什么不关闭它,把它转到mql5论坛?你为什么要给它做绝育?

人们仍然在使用它并进行交流,这意味着它是被需要的,它的功能也应该被维护!

但事实证明,像往常一样,用户和他们的意见被忽略了,一切都由单方面决定。

这正是为什么大约一年前他们做出停止支持第四个论坛的决定时没有问你。正因为那里有很多有用的信息,所以没有被销毁--使用它。但作为一个参考。
 
Andrey Voytenko:

关于初始化。有可能这样写吗?

...

总之,我最喜欢的通过={0}与字符串的初始化并不奏效。这是一种耻辱。

谢谢你的帖子,错误已经修复。该修复将包括在下一个版本中。
 

关于MT4的问题。

下午好。面临着一个关于地段大小定义的问题。以下是代码。

特别是在Alpari上。具体到美元兑日元。它应该把订单上的数据输出到图表上,但是.....对于美元-日元不能显示正确的数值!我对阵列中的数据感兴趣!

我还能做什么?

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

关于MT4的问题。

下午好。面临着一个关于地段大小定义的问题。以下是代码。

特别是在Alpari上。具体到美元兑日元。它应该把订单上的数据输出到图表上,但是.....对于美元-日元不能显示正确的数值!我对阵列中的数据感兴趣!

我还能做什么?

但在科瓦列夫的教程中,它确实起作用。是什么阻碍了我正确地复制它并根据新的要求进行调整?
 
Artyom Trishkin:
但科瓦列夫的教程仍然有效。是什么阻碍了我们正确地复制它并根据新的要求调整它?

我会让你大吃一惊,但这在其他购物中心也是可行的。如果你从一开始就仔细阅读这个帖子...

特别是在Alpari上。特别是在美元-日元方面。

我们还能做什么?

 
Sergey Vedmanov:

我会让你大吃一惊,但这在其他购物中心也是可行的。如果你从一开始就仔细阅读这个帖子...

特别是在Alpari上。特别是在美元-日元方面。

你可以另外做什么?

......在其他贸易中心?:)

我看到了你的具体内容。我没有打探,因为我认为这是多余的。所有这些科瓦列夫终端...

但在你的代码中,我看到存储的数据和注释中对这些数据的描述之间存在差异--这已经让人困惑了。

更进一步。

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

你的批次是由变量a2打印的,但我们要保存什么呢?在这里,它是。

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

或者我们应该用DoubleToString()来打印它?

而且你对这一批次的正常化处理是不正确的。你需要函数来实现批次的正常化。我不会去寻找它。你可以在Kim's搜索到它--它可以为你做。

 
Artyom Trishkin:

...在其他购物中心?:)

我看到了你的具体内容。我没有打探,因为我认为这是多余的。所有这些科瓦列夫终端...

但在你的代码中,我看到存储的数据和注释中对这些数据的描述之间存在差异--这已经让人困惑了。

更进一步。

你的批次是由变量a2打印的,但我们要保存什么呢?在这里,它是。

或者我们应该通过DoubleToString()来输出它?

这批货被错误地规范化了。我们需要函数来实现批次的正常化。我不会去寻找它。你可以在Kim's找 找看--它对你有用。

找到了。谢谢你。但这并不能解决手头的任务。

它在其他CA和这个代码上工作正常。

它与Kim的功能运作不正确。

它通过DoubleToString()读取正确,但计算不正确。我不会通过DoubleToString()来计算。如果我去那里再回来,它就能正确地转移弦,但弦的双倍数又是错误的。

问题出在阿尔帕里,我们需要一个拐杖来绕开它。

USD-SEK不正确地显示另一个货币对的开盘价。

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