从头开始自学MQL5语言 - 页 70

 
MrBrooklin:

我们应该用正确的名字来称呼事物--目前 在编程方面就像一个软木塞一样笨!我不了解基本的东西。我必须直呼其名--目前我在编程方面很笨,基本的东西我都不懂。上周末,我用万用表和我祖父的放大镜找到了一个有问题的SMD电容器,尺寸很微小。它显示了故障、短路或 "koza",因为它曾经被称为来自短路的缩写,即短路。这是一张在智能手机上用4倍放大镜拍摄的 "刺破 "的SMD电容器的照片,随后在Paint 中进行处理,因为它是太微观的元素。


决定离题一点,至少要展示一些东西!

而关于学习语言的愿望,我也有,也希望能掌握编程的基本知识。

问候,弗拉基米尔!


酷!顺便说一下,这些东西是相互接近的。
当我在90年代还是个学生的时候,这些部门都位于同一个信息技术系。
 
Roman Shiredchenko:

在这里-- 让我不同意你的观点,你可以而且应该编码,是什么阻碍了你去了解它的底细......以了解等等......此外,IMHO,有文章,有机器人在kodobase - 阅读,解析已经准备好的代码 - 立即学习写作风格。你为什么要重新发明车轮呢?直接从识字的代码中学习。

这里是V.卡尔普托夫的一个拖网- 它是在ROBOTS中,看 - 根据你的需要(条款和你的幻想)调整它。

P.S. 感谢你,这个分支的主题,我开始了解代码,它的功能......,研究文章和重复基本的东西为自己......

谢谢你的提示!:-)(不是开玩笑)

你好,罗曼!令人欣慰的是,读到所创造的主题对除我之外的其他人仍有帮助。谢谢你!

关于弗拉基米尔-卡尔普托夫写的密码,对我来说,到目前为止,它是我无法达到的。总的来说,我不理解那些包含include文件和类的代码。为什么一个文件或另一个文件被包含在另一个EA中,这是一个很大的谜团!

我主要是在寻找和研究没有包含文件和类的代码。Vladimir Khlystov编写的专家顾问对自我学习非常有利。在 此特别感谢他!遗憾的是,MQL5中的专家顾问太少。

现在我想解释一下为什么我要求你不要建议现成的代码。原因是,准备好的代码可能会暗示你,而你不再有兴趣学习这门语言。现在你已经把现成的代码插入到你的专家顾问中;它已经生效了,那么它有什么用呢?而相反,当你不能立即理解并写出一些东西时,比如说,目前对循环运算符的误解,就会让人很振奋,很有动力!

我不认为学习MQL5有什么问题。我只是经历了我人生中大约相同的阶段,当时我在学习电子学,从研究一种元素基础到研究另一种元素。唯一的区别是,年轻时一切都比现在更容易被感知和同化。我已经经历过了。

谢谢大家的支持和建设性的建议!我们会继续努力。我继续学习MQL5!我将 "消失 "半天,因为我需要去莫斯科的另一端办事,然后我将继续。

真诚的,弗拉基米尔。

 
Aleksey Masterov:

酷!顺便说一下,这些东西都在附近...
在我的大学,我在90年代学习,这些部门都在同一个IT部门。

90年代 他们正在购买文凭。

- 你现在看不到吗,有这些部门主管坐在所有的办公室里

 
SanAlex:

早在 90年代,购买文凭。

- 你现在看不到吗,有这些部门主管坐在所有的办公室里吗?

当时甚至没有可能买到文凭,事实上,在过去的30年里,技术已经进步了很多,知识非常缺乏,例如,我当时不得不学习autocad,这在当时根本不存在,还做了一个非常基本的C++。 因此,在任何事情上,你需要不断地学习更多,改进,与时俱进)

 
VVT:

这甚至与当时购买学位的能力无关,事实是,在过去的30年里,技术已经发展到如此程度,以至于知识已经非常缺乏,例如,我后来不得不完成学习autocad,这在当时根本不存在,还做了一个非常基本的C++。因此,在任何事情上,你需要不断学习,提高,与时俱进)

在过去的30年里,技术已经取得了很大的 进步--它仍然在使用60年代的那些发展。

 

大家下午好!

如果我想补充一些有趣的东西,我认为 "从头开始自我培训MQL5"的想法不太正确。 如果一个人在编程方面是0,他必须先学会如何编程。如果目的是要从头开始学习如何用MQL编程,一个人必须首先学习如何用C语言编程,至少是最基本的,然后再学习用MQL写作,因为MQL实际上是C语言,但它是专门用于某种任务的,一个人不了解循环的工作原理,已经在尝试写程序。这就像在不懂俄语的情况下试图学习拉丁语......

另一点是,C语言对学习编程并不友好,它很简单,但过于简洁,如果没有对算法、数据类型、布尔代数的基本了解,初学者很难阅读和理解代码。 在C语言中,一排三个字符可能意味着其他语言中的几个字符串。

要想简单地从头开始学习编程,对于基础,学习用一种(不管是什么)语言与计算机对话,我建议从Pascal开始,最简单的书开始学习(2-3周就可以了),然后是C(在Pascal之后最大的一周,如果勤奋,掌握语法,我是说语言的基本知识!)。),然后拿起专门的语言,如MQL,因为MQL是C,它有一点扭曲和简化,因为它是为单一任务设计的,而且编译器知道明显的。而C又是一种RAR压缩的Pascal,但Pascal几乎是英语=)。

现在说说循环。

当我学习编程时,与代数中的和的类比帮助了我,你指定n的初始值、n的最终值以及用这个n来计算的公式。

 
VVT:

这甚至不是关于当时购买文凭的可能性,事实是,在过去的30年里,技术已经发展到如此程度,以至于这些知识非常缺乏,例如,我不得不学习autocad,这在当时还不存在,还做了非常基本的C++。因此,在所有的事情上,你需要不断地学习更多,改进,与时俱进)



:-) autocad就在身边。我们有基于它的课程,学习电路和层的布局...电路板
 
Aleksey Masterov:
:-) autocad是。我们有一个基于它的课程,学习电路和印刷电路板的层......布局

我们只有22台电脑,只有在下课时才装上),老师白天就一直开着,根本不可能工作,我们甚至不谈干部。

 
MrBrooklin:

你好,罗曼!很高兴看到这个话题对我以外的人有帮助。谢谢你!

至于弗拉基米尔-卡尔普托夫所写的代码,我暂时还无法触及。总的来说,我不理解包含有文件和类的代码。为什么一个文件或另一个文件被包含在另一个EA中,这是一个很大的谜团!

我主要是在寻找和研究没有包含文件和类的代码。Vladimir Khlystov编写的专家顾问对自我学习非常有利。在 此特别感谢他!遗憾的是,MQL5中的专家顾问太少。

现在我想解释一下为什么我要求你不要使用现成的代码。原因是,准备好的代码可能会暗示你,而你不再有兴趣学习这门语言。你只是把现成的代码粘贴到你的专家顾问中,它可以工作,那么它有什么好处?而相反,当你不能立即理解并写出一些东西时,例如,目前对循环运算符的误解,它是如此的鞭策和激励,让人难以相信

我不认为学习MQL5有什么问题。我只是经历了我人生中大约相同的阶段,当时我在学习电子学,从研究一种元素基础到研究另一种元素。唯一的区别是,年轻时一切都比现在更容易被感知和同化。我已经体验到了这一点。

谢谢大家的支持和建设性的建议!我们会继续努力。我继续学习MQL5!我将 "消失 "半天,因为我需要去莫斯科的另一端办事,然后我将继续。

真诚的,弗拉基米尔。

我同意--他的代码也很好。你为了什么都不做,而把自己搞得焦头烂额。悄悄地整理一下代码,不要着急,就这样。这里所有的元素都在这里-- 选择和拖网:(多么容易--只是你选择的主题 必要的位置......)。

//--- при таком методе мы будет сюда попадать на каждом тике.
   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            //--- TrailingStop -> подтягивание StopLoss у ПРИБЫЛЬНОЙ позиции
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               //--- когда у позиции ещё нет StopLoss
               if(m_position.StopLoss()==0)
                 {
                  //--- пока StopLoss равен 0.0, TrailingStep не учитываем
                  if(m_symbol.Bid()-ExtTrailingStop>m_position.PriceOpen())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),m_position.PriceOpen(),0.0);
                    }
                 }
               //--- у позиции уже есть StopLoss
               else
                 {
                  //--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
                  //--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
                  if(m_symbol.Bid()-ExtTrailingStop-ExtTrailingStep>m_position.StopLoss())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),
                                            NormalizeDouble(m_symbol.Bid()-ExtTrailingStop,m_symbol.Digits()),0.0);
                    }
                 }
              }

            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               //--- когда у позиции ещё нет StopLoss
               if(m_position.StopLoss()==0)
                 {
                  //--- пока StopLoss равен 0.0, TrailingStep не учитываем
                  if(m_symbol.Ask()+ExtTrailingStop<m_position.PriceOpen())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),m_position.PriceOpen(),0.0);
                    }
                 }
               //--- у позиции уже есть StopLoss
               else
                 {
                  //--- теперь TrailingStep нужно учитывать, иначе мы будет модифицировать
                  //--- поизцию НА КАЖДОМ ТИКЕ, а это ПЛОХО
                  if(m_symbol.Ask()+ExtTrailingStop+ExtTrailingStep<m_position.StopLoss())
                    {
                     //--- модификация позиции
                     m_trade.PositionModify(m_position.Ticket(),
                                            NormalizeDouble(m_symbol.Ask()+ExtTrailingStop,m_symbol.Digits()),0.0);
                    }
                 }
              }
           }
  }

除此之外,包含文件--这意味着你在代码中也将它们作为函数,仅此而已。

#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
 

这里有另一篇文章-- 拖网2010--拖网是在顾问从标准MACD交付。



这里还有一个关于 仓位量计算的精彩咀嚼!!。我自己也深陷其中...:-)

确定一个符号的总仓位量的另一种方法是在循环中浏览所有的仓位,仓位的数量由PositionsTotal() 函数决定。通过PositionGetSymbol() 函数的检查,找到需要的符号,并确定位置体积和方向(PositionGetDouble()POSITION_VOLUME 标识符和PositionGetInteger()POSITION_TYPE 标识符)。

在这种情况下,完整的函数将看起来像这样

double fSymbolLots(string aSymbol)
  {
   double TmpLots=0;
   for(int i=0;i<PositionsTotal();i++) // Перебор всех позиций
     {
      if(PositionGetSymbol(i)==aSymbol) // Найдена позиция с заданным символом
        {
         TmpLots=PositionGetDouble(POSITION_VOLUME);
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            TmpLots*=-1; // В зависимости от направления позиции устанавливаем знак числа
           }
         break;
        }
     }
   TmpLots=NormalizeDouble(TmpLots,2);
   return(TmpLots);
  }
Как создать свой Trailing Stop
Как создать свой Trailing Stop
  • www.mql5.com
Перед тем как приступить к разговору на тему статьи, предлагаю расставить точки над i. Лишний раз не помешает определиться с понятиями "позиция" и "ордер": Позиция - это рыночное обязательство, количество купленных или проданных контрактов по финансовому инструменту. Позиция по одному инструменту может быть только одна. Ордер - это распоряжение...