//--- при таком методе мы будет сюда попадать на каждом тике.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)
{
//--- когда у позиции ещё нет StopLossif(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);
}
}
//--- у позиции уже есть StopLosselse
{
//--- теперь 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)
{
//--- когда у позиции ещё нет StopLossif(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);
}
}
//--- у позиции уже есть StopLosselse
{
//--- теперь 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);
}
}
}
}
}
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);
}
Перед тем как приступить к разговору на тему статьи, предлагаю расставить точки над i. Лишний раз не помешает определиться с понятиями "позиция" и "ордер": Позиция - это рыночное обязательство, количество купленных или проданных контрактов по финансовому инструменту. Позиция по одному инструменту может быть только одна. Ордер - это распоряжение...
我们应该用正确的名字来称呼事物--目前我 在编程方面就像一个软木塞一样笨!我不了解基本的东西。我必须直呼其名--目前我在编程方面很笨,基本的东西我都不懂。上周末,我用万用表和我祖父的放大镜找到了一个有问题的SMD电容器,尺寸很微小。它显示了故障、短路或 "koza",因为它曾经被称为来自短路的缩写,即短路。这是一张在智能手机上用4倍放大镜拍摄的 "刺破 "的SMD电容器的照片,随后在Paint 中进行处理,因为它是太微观的元素。
决定离题一点,至少要展示一些东西!
而关于学习语言的愿望,我也有,也希望能掌握编程的基本知识。
问候,弗拉基米尔!
在这里-- 让我不同意你的观点,你可以而且应该编码,是什么阻碍了你去了解它的底细......以了解等等......此外,IMHO,有文章,有机器人在kodobase - 阅读,解析已经准备好的代码 - 立即学习写作风格。你为什么要重新发明车轮呢?直接从识字的代码中学习。
这里是V.卡尔普托夫的一个拖网- 它是在ROBOTS中,看 - 根据你的需要(条款和你的幻想)调整它。
P.S. 感谢你,这个分支的主题,我开始了解代码,它的功能......,研究文章和重复基本的东西为自己......
谢谢你的提示!:-)(不是开玩笑)
你好,罗曼!令人欣慰的是,读到所创造的主题对除我之外的其他人仍有帮助。谢谢你!
关于弗拉基米尔-卡尔普托夫写的密码,对我来说,到目前为止,它是我无法达到的。总的来说,我不理解那些包含include文件和类的代码。为什么一个文件或另一个文件被包含在另一个EA中,这是一个很大的谜团!
我主要是在寻找和研究没有包含文件和类的代码。Vladimir Khlystov编写的专家顾问对自我学习非常有利。在 此特别感谢他!遗憾的是,MQL5中的专家顾问太少。
现在我想解释一下为什么我要求你不要建议现成的代码。原因是,准备好的代码可能会暗示你,而你不再有兴趣学习这门语言。现在你已经把现成的代码插入到你的专家顾问中;它已经生效了,那么它有什么用呢?而相反,当你不能立即理解并写出一些东西时,比如说,目前对循环运算符的误解,就会让人很振奋,很有动力!
我不认为学习MQL5有什么问题。我只是经历了我人生中大约相同的阶段,当时我在学习电子学,从研究一种元素基础到研究另一种元素。唯一的区别是,年轻时一切都比现在更容易被感知和同化。我已经经历过了。
谢谢大家的支持和建设性的建议!我们会继续努力。我继续学习MQL5!我将 "消失 "半天,因为我需要去莫斯科的另一端办事,然后我将继续。
真诚的,弗拉基米尔。
在 90年代, 他们正在购买文凭。
- 你现在看不到吗,有这些部门主管坐在所有的办公室里
早在 90年代,购买文凭。
- 你现在看不到吗,有这些部门主管坐在所有的办公室里吗?
当时甚至没有可能买到文凭,事实上,在过去的30年里,技术已经进步了很多,知识非常缺乏,例如,我当时不得不学习autocad,这在当时根本不存在,还做了一个非常基本的C++。 因此,在任何事情上,你需要不断地学习更多,改进,与时俱进)
这甚至与当时购买学位的能力无关,事实是,在过去的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来计算的公式。
这甚至不是关于当时购买文凭的可能性,事实是,在过去的30年里,技术已经发展到如此程度,以至于这些知识非常缺乏,例如,我不得不学习autocad,这在当时还不存在,还做了非常基本的C++。因此,在所有的事情上,你需要不断地学习更多,改进,与时俱进)
。
我们只有22台电脑,只有在下课时才装上),老师白天就一直开着,根本不可能工作,我们甚至不谈干部。
你好,罗曼!很高兴看到这个话题对我以外的人有帮助。谢谢你!
至于弗拉基米尔-卡尔普托夫所写的代码,我暂时还无法触及。总的来说,我不理解包含有文件和类的代码。为什么一个文件或另一个文件被包含在另一个EA中,这是一个很大的谜团!
我主要是在寻找和研究没有包含文件和类的代码。Vladimir Khlystov编写的专家顾问对自我学习非常有利。在 此特别感谢他!遗憾的是,MQL5中的专家顾问太少。
现在我想解释一下为什么我要求你不要使用现成的代码。原因是,准备好的代码可能会暗示你,而你不再有兴趣学习这门语言。你只是把现成的代码粘贴到你的专家顾问中,它可以工作,那么它有什么好处?而相反,当你不能立即理解并写出一些东西时,例如,目前对循环运算符的误解,它是如此的鞭策和激励,让人难以相信
我不认为学习MQL5有什么问题。我只是经历了我人生中大约相同的阶段,当时我在学习电子学,从研究一种元素基础到研究另一种元素。唯一的区别是,年轻时一切都比现在更容易被感知和同化。我已经体验到了这一点。
谢谢大家的支持和建设性的建议!我们会继续努力。我继续学习MQL5!我将 "消失 "半天,因为我需要去莫斯科的另一端办事,然后我将继续。
真诚的,弗拉基米尔。
我同意--他的代码也很好。你为了什么都不做,而把自己搞得焦头烂额。悄悄地整理一下代码,不要着急,就这样。这里所有的元素都在这里-- 选择和拖网:(多么容易--只是你选择的主题 必要的位置......)。
除此之外,包含文件--这意味着你在代码中也将它们作为函数,仅此而已。
这里有另一篇文章-- 拖网2010--拖网是在顾问从标准MACD交付。
这里还有一个关于 仓位量计算的精彩咀嚼!!。我自己也深陷其中...:-)
确定一个符号的总仓位量的另一种方法是在循环中浏览所有的仓位,仓位的数量由PositionsTotal() 函数决定。通过PositionGetSymbol() 函数的检查,找到需要的符号,并确定位置体积和方向(PositionGetDouble() 与POSITION_VOLUME 标识符和PositionGetInteger() 与POSITION_TYPE 标识符)。
在这种情况下,完整的函数将看起来像这样