[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 776

 
vasya_vasya:
通过创建一个选择符号代码的Errow对象或使用一个标签对象来实现。

谢谢)诶,真可惜,就是没有点(
 
FoxUA:
我不是一个工人,但我正试图为我所做的这一周写一个专家顾问。我想为一份工作写一份EA,但我在一周前才知道它的名字和应用。我不知道它是做什么用的,但我想,不知道是做什么用的,就很难把东西拆开,所以我决定尝试做一些新的东西,当然你不能看到所有的东西,我只是做了我想做的一件事--按REMOTE的价格把REMOTE ORDER拿掉,这没什么大不了的。但感谢你的时间。

没有冒犯的意思。你的代码对初学者来说很复杂。你必须从简单到复杂。必须有一个系统的学习方法,否则就没有任何好处。
 
如果知道其(本条)的开盘时间,我能否用mql4查出本条的条数或任何不在当前图表周期 的价格参数?
 
drknn:

不要被冒犯。你的代码对初学者来说很复杂。你必须从简单到复杂。你必须有一个系统的学习方法,否则就没有用。

我不同意你的说法,你应该有一个目标,其他的就会跟上,但你需要帮助。 至于复杂,样本交易机器人有什么不复杂和简单的呢? 我不是做一个有复杂计算的大EA,而是做一个简单的,打开市场一个,暂停,修改和删除整个板块,学习影响另一个的操作和方法
 
FoxUA:

我不同意你的说法,你应该有一个目的,其他的一切都会随之而来,但是,当然,你不能没有帮助。 至于复杂性,你认为什么是简单和容易建立的? 我不是做一个大的EA,有复杂的计算和指标,而是一个简单的,打开市场一个,然后修改和删除整个董事会,学习影响另一个的工作原理和方法!


改变代码构造的逻辑和变量命名的逻辑。这是你应该做的第一件事。如果一个变量的名字超过5个字符也没关系。在争取代码清晰度的斗争中,名称的清晰度,用空格、段落符号和注释来划分块是非常重要的。你越是学习一种语言(不仅仅是MQL),你的代码就会变得越复杂。如果你不养成给变量起个容易读懂的名字的习惯,如果你不养成用块来组织代码的习惯(有解释),迟早你会创造出让你很难找到逻辑错误的代码,咒骂自己把代码弄得这么难看。

如果你所展示的代码对你这个初学者来说并不复杂,那只是对你来说是个加分项。

 
FoxUA:
好吧,你有什么建议? 我对你的意见非常感兴趣

这里有一个代码的例子,它是以块的形式组织起来的,变量的名字不会让人怀疑为什么要应用某个特定的变量--看看它们的名字,看看块的注释......。

 
RekkeR:
大家晚上好,祝大家有一个美好的一周。我想我的热度太低了,其实问题是如何确定点线之间的距离?

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

距离=(价格1-价格2)/点。

这是如果要确定当前时间的两条线之间的距离。

 
drknn:

这里有一个代码的例子,它是以块为单位组织的,其中的变量名称不会让人怀疑为什么要应用这个或那个变量--看看它们的名字,看看块的注释......。

我同意有时你需要记住你想在那里写的东西而不记得,但这更多的是一种工作方法,但不是研究,可以说是艺术家手中的画笔,我对写一个简单的小画面的颜色和技巧的选择感兴趣,因为我已经有一个风景,它的形状很清晰。所以我想知道是否有可能有一本有趣的书,描述在所有相同的互联网和教科书的写作技术,只有在其他的话和你写的根的例子,这是一个机器人的技术,所以我很乐意阅读,如果的例子和图片

 
tara:

Speed1=(Price12-Price11)/(Bar11-Bar12); Speed2=(Price22-Price21)/(Bar21-Bar22);

Price1=Price11+Speed1*Bar11; Price2=Price21+Speed2*Bar21;

距离=(价格1-价格2)/点。

这是如果要确定当前时间的两条线之间的距离。

有几条水平线,我需要在不同的组合中确定它们之间的配额,原则上,在这个阶段,我对两条线之间的确定相当满意,其余的我将手动完成。也许有一个现成的脚本或这样一个指标?谢谢你的反馈。
 
FoxUA:

...

这就是我想读到的有例子和图片的东西!

好吧,让我们做个实验吧!让我们写两个脚本。一个将包含对功能的正确描述。另一个将包含错误的。因此,这是正确的脚本。

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы правильного скрипта                 |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("---- Правильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

而这是错误的剧本。

#property show_inputs //эта строка выводит окно пользовательских параметров на экран
extern double DlyaKornya=300; // величина. из которой нужно извлечь кв. корень
//+------------------------------------------------------------------+
//|                 Старт работы неправильного скрипта               |
//|                 вычисляющего квадратный корень                   |
//+------------------------------------------------------------------+
int start(){
  double Koren=0;
        Alert("--------------------------------------------");
  if(DlyaKornya<0){
    Alert("Ошибка! Переменная ",DlyaKornya," не может быть меньше нуля");
    return(0);
  }
  Koren=MyKoren(DlyaKornya);
  Alert("Наша подпрограмма выдала результат = ",Koren);
        Alert("На вход функции MyKoren() было подано число = ",DlyaKornya);
  Alert("----НЕправильное применение функции ----");
        return(0);
}
//+------------------------------------------------------------------+
//|                  Пользовательские подпрограммы                   |
//+------------------------------------------------------------------+

// ------------ MyKoren() -------------------------------------
// функция возвращает квадратный корень числа
// ------------------------------------------
double MyKoren(double MyValue=36){
        double Rezult=0;
        Alert("Внутри функции переменная MyValue имеет значение = ",MyValue);
        Rezult=MathSqrt(MyValue);
        return(Rezult);
}

这是不正确的,因为这一行double MyKoren(double MyValue=36){ 将变量MyValue初始化为值=36 这没有意义,因为我们将值=传递给DlyaKornya变量进入子程序

现在我们把这两个脚本依次抛给图表。以下是我们看到的情况。

唉,两个脚本都产生了同样的结果。

第二个(不正确的)脚本应该产生值=6。编译器很可能有内置的防骗功能,因为double MyKoren(double MyValue=36){行没有意义。只有在不指定参数的情况下调用该函数,其中变量的初始化 值=36才可能起作用。在我们的案例中,肯定发生了以下情况 - 当调用子程序时,首先声明了变量double MyValue,然后它被分配了值=36,之后才被分配了存储在变量DlyaKornya的值。我想不出任何其他解释。

总之,最好不要使用像double MyKoren(double MyValue=36){这样的结构,而应该写成--double MyKoren(double MyValue){,否则你会怀疑为什么子程序不能正常工作。

原因: