新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 679

 
Artyom Trishkin:

谢谢你。

 
下午好,请你帮助我解决一个关于简单循环的问题。
循环的本质是,变量I被递增1。
该值被打印出来。
循环本身。

for (int i=0; i<100000;i++)
{
Print("I =",i);
如果(i>3000)
{
Print("I =",i);
突破。
}

问题是,如果条件if(i>3000)中的数字大致上大于100(在我的例子中是三千)。
则打印输出不同的值。不断地。
我的观点是,如果这个循环看起来像这样
for (int i=0; i<100000;i++)
{
Print("I =",i);
如果(i>100)
{
Print("I =",i);
突破。
}

测试仪中的打印显示值I=0,然后是1,然后是2,然后是3,然后是4,...以此类推,直到100。
但是!如果条件是if(i>3000),打印将显示自......以来的数值。我甚至不知道如何正确表达......
从一个单一的数字,例如2895,然后加上一个!"。

下面是一个例子,说明它可能的样子。

如果i>100

100


如果i>3000

3000



有什么问题呢?我已经挣扎了一整天,无法弄清楚((((,请帮助!







 
eflaer:
问题是什么?我已经挣扎了一整天,无法弄清楚((((,请帮助!

打开日志文件,有一份完整的报告

 
Taras Slobodyanik:

打开日志文件,有一份完整的报告

谢谢,打开了日志文件,确实所有的倒计时都是以零开始的................,为什么不是所有的东西都写在日志里?

我怎样才能让所有的东西都显示在日志中,我需要整个计时,我在寻找算法中的一个错误。

 
每次打开7GB以上的txt日志文件实在不方便,.......。
 
eflaer:

谢谢你,打开了日志文件,确实所有的倒计时都是以零开始的................,为什么日志中没有一切?

我怎样才能让所有的东西都显示在日志中,我需要整个时间线,我在寻找算法中的一个错误。

因为记录和处理图形对象需要大量的资源(时间),MT为此进行了优化,可以 "吞下 "部分日志,但迅速执行脚本主体本身

在Print()后面加上Sleep(120)。


eflaer:
每次打开日志文件都很不方便,txt文件重达7+GB.......。

定期删除日志文件,它是按日期记录的,如果你今天只在里面写实验,为什么需要这么大一个文件?

 
非常感谢您!真的很有帮助!我将继续寻找错误...
 
Vitali Vakulin:
你好。我想做一个10%的缩减,这样如果我有一个缩减,比如说我的专家顾问就不会开新的订单,它只是把已开的订单追到TP,就这样,只有平均的订单才会开如果我的交易是在几个货币对上进行的,这将帮助我不至于陷入巨大的跌幅。我理解这个功能,我希望我能够实现它。

伙计们,请帮忙。

 

晚上好。

首次尝试编写EA。你能告诉我为什么我的专家顾问只打开买入?错误在哪里?

extern double volume     = 0.05;   // Volume
extern int    stopLoss   = 1;      // StopLoss
extern int    takeProfit = 3;      // TakeProfit
extern int    slippage  = 10;          // Slippage
extern int    Period_bars  = 100;    // Period
extern int    magic      = 321;    // Magic
extern int    ATR_Period = 50;      // ATR Period

datetime newCandle;
double ABS_High=0;
double ABS_Low=1000000;

int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {
//---
 

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {

        double TD_Close=Close[1];

        double ATR=iATR(Symbol(),Period(),ATR_Period,0);

        double bsl=NormalizeDouble(Ask-(stopLoss*ATR),_Digits);

        double btp=NormalizeDouble(Ask+(takeProfit*ATR),_Digits); 

        double ssl=NormalizeDouble(Bid+(stopLoss*ATR),_Digits);

        double stp=NormalizeDouble(Bid-(takeProfit*ATR),_Digits); 

        for (int i=2; i<=Period_bars; i++)
        {
                if (Period_bars<=Bars-1)
                {
                        if (ABS_High<High[i]) ABS_High=High[i];
                        if (ABS_Low>Low[i]) ABS_Low=Low[i];
                }

                break;
        }

        if (TD_Close>ABS_High)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,bsl,btp,"Система пробоя открыла ордер BUY ",magic,0);

                else newCandle = Time[0];
        }
        else
        if (TD_Close<ABS_Low)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,ssl,stp,"Система пробоя открыла ордер SELL ",magic,0);
                else newCandle = Time[0];
        }
}

 
Andrey.Sabitov:

晚上好。

首次尝试编写EA。你能告诉我为什么我的专家顾问只打开买入?错误在哪里?



更加仔细地插入(进入)代码 :-)

我看不出ABS_High在哪里被改变,它似乎是恒定的0,而且TD_Close>ABS_High的条件总是正确的。

原因: