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

 
MakarFX #:

是的,你搞得一团糟)

现在,在每个文件夹中,逐一将Experts文件夹重命名为_Experts,将Indicators文件夹重命名为_Indicators

在一个文件夹中重命名--启动终端,如果没有帮助--重命名回来,然后去下一个文件夹。

P.S. 终端的第一次启动时间会比平时长一点。

马卡!

该事件发生在今天。因此,我没有碰有旧日期的文件夹。

而对新鲜的文件夹进行修改并没有改变任何东西。

所以我把配置文件、指标和专家顾问系统拖到另一个终端。我终于完成了这个烂摊子。

现在一切都在运作。不过,我把它放在不同的终端上。但重要的是结果--你可以工作。

我稍后将删除该终端。

我认为你的建议是通过编辑器找到指标和配置文件,这是很完美的!

特别是对于像我这样的编程 "傻瓜 "来说。

非常感谢您的帮助和响应!我们将继续努力。

好运!

谢谢!

 

大家好。刚刚开始了解这上面的一切,可以马上说我比绿色更绿。我不知道我有多少时间,但我会得到一些经验。 你能告诉我谁遇到过这种情况吗? 我需要一个脚本 或代码,在接下来的10个点中保持观察,没有开放的买入和卖出。

1.....,例如,一个嘀嗒声传来--代码寻找如果在接下来的10个点中没有向下和(或)向上的订单,则设置一个卖出订单。如果什么都没有也有买入订单

下面是外汇EA生成器 中的 一个例子方案



附加的文件:
hktrabmcw4.jpg  222 kb
 
valentin104 一个脚本 或代码,在接下来的10个点中保持观察,没有开放的买入和卖出。

1.....,例如,一个嘀嗒声传来--代码寻找如果在接下来的10个点中没有下跌和(或)上涨的订单,则设置一个卖出订单。如果有,则没有也有买入订单

下面是外汇EA生成器 中的 一个例子方案



这个计划是愚蠢的。

 
Artyom Trishkin #:

这是一个愚蠢的计划。

不,如果没有if和else,它看起来就是这样)。但这不是我的意思。

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)

脚本给出了tick_s =1.0 tick_vflue =80.32786885245902,但在owl中tick_value =80.37529660186777 tick_size =1e-05。

分数打破了。




 
Artyom Trishkin #:

这是一个愚蠢的计划。

你错过了重点。

valentin104 #:

嘿,各位。我刚刚开始了解这一切,所以我只说这一点 我比绿色更绿。

 
Galim_V #:

不,如果没有if和else,它看起来就是这样)。但这不是我的意思。

脚本给出了tick_s =1.0 tick_vflue =80.32786885245902,在owl中tick_value =80.37529660186777tick_size =1e-05

tick_value被破坏了。




tick_size =1e-05

归一化 DoubleToString(tick_size , 2)

 
MakarFX #:

tick_size =1e-05

归一化 DoubleToString(tick_size , 2)

独自一人的零点。连百分之一都没有。

//+------------------------------------------------------------------+
//|                                                     MAX+risk.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property script_show_inputs
enum Mani
  {
   free_margin,
   balans
  };
input Mani risk_mani;
input double Lot=0.0;
input int max_risk =0; //В% от свободных средсв или...
input int stoploss=300;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double Lots=0;
   int    Max_Risk=0;

   printf("ACCOUNT_MARGIN_FREE =  %G",AccountInfoDouble(ACCOUNT_MARGIN_FREE)); //Размер свободных средств на счете  в валюте
   printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE)); //Баланс счета в валюте депозита
   printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));    // Уровень залоговых средств в %

   double freemani=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   double balance=AccountInfoDouble(ACCOUNT_BALANCE);
   double tick_s =  SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)/_Point;  //Минимальное изменение цены
   double tick_value= SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);//Размер минимального изменения цены инструмента в валюте депозита
   if(risk_mani==balans)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= balance*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_BALANCE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/balance*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   if(risk_mani==free_margin)
     {
      if(max_risk>0&&stoploss>0)
        {
         double tmp= freemani*max_risk/100/(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE));
         Lots=NormalizeDouble(tmp,2);
         printf(" Чтобы max_risk был не более %f%s%d%s%f",max_risk," в % от ACCOUNT_MARGIN_FREE при stoploss =",stoploss,",неоходим Lots =",Lots);
        }
      if(Lot>0)
        {
         Max_Risk= (int)MathRound(Lot*(stoploss*_Point*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))/freemani*100);
         printf(" Max_Risk при Lot=%f%s%d,%s%d%s",Lot," и stoploss =",stoploss," будет =",Max_Risk,"%");
        }
     }
   Print("Lots =",Lots," Max_Risk =",Max_Risk," tick_s =",tick_s," tick_vflue =",tick_value);
  }
//+------------------------------------------------------------------+

它在这里起作用。在黑板上,用变量代替了函数。但从一开始,该函数就在OnTick()中产生了胡言乱语。

 
Galim_V #:

全是零。甚至找不到百分之一。

它在这里起作用。在Owl中,变量代替了函数。但该函数在OnTick()中已经产生了胡言乱语。

找到了。对不起。tick_size =1e-05的是0.00001,是正确的

 
valentin104 #:

我一开始就告诉你,我比绿色更绿。我不知道我还能坚持多久


用这种方法学习编程,你最好雇用一个程序员,而不用担心这个问题。

 

我们有一个标准的ZigZag指标,但它的画线风格是DRAW_SECTION,即指标缓冲区 中的大部分 数值等于EMPTY_VALUE,只有有时出现不同的数值(断点),作为画线的基础。我想每个人在他们的生活中都至少见过这个指标和/或其代码一次。

任务 是获得对应于最后一个断点的值,即指标缓冲区的最新值,它不等于EMPTY_VALUE。

注意:循环查看指标缓冲区的值,从零点开始往下移,每次迭代都调用iCustom函数,直到得到的值与EMPTY_VALUE不同,这种做法是否正确?

还是有一些更简单的方法来获得这个值?

原因: