初学者的问题 MQL4 MT4 MetaTrader 4 - 页 61

 
Renat Akhtyamov:
我希望在OnInit()中有一个值分配给Percent 变量?
百分比变量是用户定义的。我已经放弃了OnInit()。
 
Michail_David:
我的百分比变量是用户定义的。OnInit()我已经放弃了它。
如果Lots=0,测试器将不会打开任何东西
 
Renat Akhtyamov:
如果Lots=0,测试者将不会打开任何东西。
我有很多相对于百分比的计算。测试器计算出手数,但没有交易。

 Margin_Percent=AccountFreeMargin()*Percent/100; 

Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

      Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));

if(Lots>Lots_Volume)
        {
         Lots=Lots_Volume;
        }
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      Print("Количество лотов : ",Lots);
      return;
 
Michail_David:
我有很多相对于百分比的计算。测试器计算出手数,但没有交易。

而且,代码中哪里设置了百分比

和以下命令print("Lots : ",Lots); ?

 
Renat Akhtyamov:

然而,代码中的百分比是什么?

和以下命令print("Number of lots : ",Lots); ?

#property link      ""
#property version   "1.00"
#property strict
//--- input parameters
input int      Percent=50;
input int      Fast_EMA_Period=12;
input int      Slow_EMA_Period=25;
input int      Signal_Period=9;
input double   Step_PSAR=0.02;
input double   Maximum_PSAR=0.2;
input int      MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent;  //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   New_Time=TimeCurrent();
   if(Time[0]==New_Time) // Сравниваем время
      New_Bar=true;      // Поймался новый бар
   else if(New_Bar==false) // Если бар не новый..
第五行规定了百分比。日志打印出:"手数:90.0100000001"。也许我们应该添加NormalizeDouble()?
 
Michail_David:
在第五行中,设置了百分比。日志显示:"手数为90.0100000001"。也许我们应该添加NormalizeDouble()?

这块地没有什么问题。

寻找订单开放逻辑中的错误。

在这种情况下,我通常设置一个明确的条件,将打开订单

 
Renat Akhtyamov:

这块地没有什么问题。

寻找订单开放逻辑中的错误。

在这种情况下,我通常为订单的开启设置一个明确的条件

请给我们一个有明确条件的例子。如果我理解正确的话,循环中应该有一个条件可以打开。这是否正确?
 
Michail_David:
请举出一个有明确条件的例子。如果我理解正确的话,这个循环应该有一个打开的条件。对吗?
在代码的开头,即在计算手数之后,给出一个开单的命令,并确保测试器能正常工作。然后你就可以把所有东西放回去。
 
Renat Akhtyamov:
在代码的开头,就在计算手数之后,给出一个开单的命令,并确保测试器正常工作。然后你就可以把所有东西放回原位。
谢谢你。发现了这个错误。我已经回来了;在计算了阄之后。这就是为什么这些地段没有开放的原因
 
Michail_David:
第五行规定了百分比。日志显示:"手数90.0100000001"。也许我们应该添加NormalizeDouble()?
你应该。不仅是地段,还有所有其他传递给服务器的价值。手数也是有用的,可以检查账户价值中允许的最小和最大,也是关于步数变化,有的情况下,手数可以以0.03为增量变化,所以90.01将不会工作,至少是覆盖。