//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 16.05.2008 |//| Описание : Возвращает нормализованное значение торгуемого лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| lo - нормализуемое значение лота. |//| ro - способ округления ( False - в меньшую, |//| True - в большую сторону) |//| sy - наименование инструмента ("" или NULL - текущий символ) |//+----------------------------------------------------------------------------+double NormalizeLot(double lo, bool ro=False, string sy="") {
double l, k;
if (sy=="" || sy=="0") sy=Symbol();
double ls=MarketInfo(sy, MODE_LOTSTEP);
double ml=MarketInfo(sy, MODE_MINLOT);
double mx=MarketInfo(sy, MODE_MAXLOT);
if (ml==0) ml=0.1;
if (mx==0) mx=100;
if (ls>0) k=1/ls; else k=1/ml;
if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;
if (l<ml) l=ml;
if (l>mx) l=mx;
return(l);
}
版权
谢谢你
我再次回到我问的问题:https://forum.mql4.com/ru/15972/page693 --这里,指标和指标之间的参数转移--专家。 当然,建议使用全局变量部分地解决了这个问题,但另一个问题出现了!那就是:"全局变量 "是什么?根据全局变量的描述,.........GV变量只能是双倍类型,但我们如何期望Expert Advisors在接收全局变量的值时知道该变量是否来自某个符号和时间框架?
对符号进行编码。尽管为此可以使用变量名称,例如EUSRUSD_H1_Var1
在戈兰多计划中制造,加上你的马汀。
//+------------------------------------------------------------------+
//| Copyright 2005, Gordago Software Corp.
//| http://www.gordago.com/ |
//| 2.0版本|
//+------------------------------------------------------------------+
空白的OpenBuy() {
双重dStopLoss = 0, dTakeProfit = 0。
double Lots_New = Lot;
如果(isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Lot;
如果(dBuyStopLossPoint > 0)
dStopLoss = Bid-dBuyStopLossPoint*Point。
如果(dBuyTakeProfitPoint > 0)
dTakeProfit = Bid + dBuyTakeProfitPoint * Point;
int numorder = OrderSend(Symbol(, OP_BUY, Lots_New, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
如果(numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName)。
}
空白的OpenSell() {
双重dStopLoss = 0, dTakeProfit = 0。
double Lots_New = Lot;
如果(isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Lot;
如果(dSellStopLossPoint > 0)
dStopLoss = Ask+dSellStopLossPoint*Point。
如果(dSellTakeProfitPoint > 0)
dTakeProfit = Ask-dSellTakeProfitPoint*Point。
int numorder = OrderSend(Symbol(,OP_SELL, Lots_New, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell);
如果(numorder > -1 && lFlagUseSound)
PlaySound(sSoundFileName)。
}
你有
空白的OpenBuy() {
双重dStopLoss = 0, dTakeProfit = 0。double Lots_New = Lot;
如果(isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Lot;
是一个函数,在这个函数的最开始,你将值=Lot分配给Lots_New变量。
想一想,如果你总是把它恢复到原来的状态,它以后会有什么变化?
我在哪里告诉你要写?在启动函数之前的 外部变量中...
并将批量值归一到正确的大小。
Lots_New = NormalizeLot(Lot*2, False, "")。
编纂符号。虽然,我们可以为此目的使用变量名称,例如,EUSRUSD_H1_Var1
对了,谢谢你。但仍然不清楚...事实证明,在指标中我必须写出所有的变量名,对应于整个可能的符号数量。而如果我想在某个预定义的时刻从指标中传递一个参数,我将不得不编写指标的符号定义代码。然后使用比较或其他案例类型的函数,我将确定将参数写到哪个命名的全局变量 上! 我的理解都是正确的!?
这里还有一个反问句,或者只是想了解你的意见。在分析的本质中存在着所谓的 "模式"。模式不过是基于某些重复时刻(或参数)的模式。但不幸的是,市场是一种不稳定的物质,所以每一种模式在某种程度上都可以被当作一种不确切的模式,或者说有点偏离某些参数,是忠于模式的形成。如果我们把任何时间框架,例如15分钟,作为分析的基础,我们会看到,在某些条件下,上面会有一定数量的模式出现。而会有一些情况没有形成模式,但这些情况非常接近模式的形成,它们只是不符合某些特定的参数(它们偏离了一些)。这种情况本来是可以通过合理的模式形成条件来避免的。在这种情况下,会有更多的模式和更多的可能性进入市场,但由于参数没有严格规定,虚假模式的数量会增加。 (如果我们考虑到在严格的参数下,该模式甚至可以在这些条件下一天内不出现)。
问题!我应该用什么参数(硬条件或软条件)来形成一个模式?
帮我解决一个问题 !
我搜索的是未完成或待完成的订单。如果它们是可用的,那么我就确定哪个订单是买入或卖出。在某些条件下(如果一个比另一个大或比第三个小),我想关闭这个订单。改变其参数并再次打开它。
问题是,总是有一个信号来关闭订单和打开订单。这就是为什么我的订单关闭,然后又打开,如此反复,打开又关闭......。)))
如何解决这个问题?嘎
完全正确,谢谢你但还是不清楚。事实证明,在我的指标中,我将需要规定所有的变量名称,对应于整个可能的字符数。而如果我想在某个预定义的时刻从指标中传递一个参数,我将不得不编写指标的符号定义代码。然后使用比较或其他案例类型的函数,我将确定将参数写到哪个命名的全局变量上! 我的理解都是正确的!?
而只是一个反问,或者只是想听听你的意见。在分析的本质中存在着所谓的 "模式"。模式不过是基于某些重复的时刻(或参数)的模式。但不幸的是,市场是一种不稳定的物质,所以每一种模式在某种程度上都可以被当作一种不确切的模式,或者说有点偏离某些参数,是忠于模式的形成。如果我们把任何时间框架,例如15分钟,作为分析的基础,我们会看到,在某些条件下,上面会有一定数量的模式出现。而会有一些情况没有形成模式,但这些情况非常接近模式的形成,它们只是不符合某些特定的参数(它们偏离了一些)。这种情况本来是可以通过合理的模式形成条件来避免的。在这种情况下,会有更多的模式和更多的可能性进入市场,但由于参数没有严格规定,虚假模式的数量会增加。 (如果我们考虑到在严格的参数下,该模式甚至可以在这些条件下一天内不出现)。
问题!我应该用什么参数(硬条件或软条件)来形成一个模式?
帮我解决一个问题 !
我搜索的是未完成或待完成的订单。如果它们是可用的,那么我就确定哪个订单是买入或卖出。在某些条件下(如果一个比另一个大或比第三个小),我想关闭这个订单。改变其参数并再次打开它。
问题是,总是有一个信号来关闭订单和打开订单。这就是为什么我的订单被关闭,又被打开,所以它打开又关闭......)))
如何解决这个问题?嘎罗杰,谢谢,但还是不能正常工作。尝试了另一次拖网,但错误仍然存在 :( 拖网一个姿势和同时拖网几个姿势有什么区别吗?
我明白了,你在函数的开头定义了变量ro,但你没有把它分配到任何地方,也就是说,它是0。