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

 
#属性 indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 blue
//--------------------------------------------------------------------
double Buffer[]。
//--------------------------------------------------------------------
int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY,2)。
SetIndexBuffer(0,Buffer;)
return(0);
}
// -------------------------------------------------------------------
int deinit()
{
return(0);
}
//--------------------------------------------------------------------
int start()
{
int StartBar = Bars - IndicatorCounted() - 1;
for(int i = StartBar; i >= 0; i--)
Buffer[i] =(iClose("EURGBP",0,i)-iOpen("EURGBP",0,i))/MarketInfo("EURGBP",MODE_POINT)+
(iClose("EURAUD",0,i)-iOpen("EURAUD",0,i))/MarketInfo("EURAUD",MODE_POINT)。
return(0);
}

//---------------------------------------------------------------------

对不起,我不知道如何用代码格式化文本。

这是一个简单的计数器指标(在当前时间框架上以点为单位的仪器机构的总和)仪器任何。直方图的每个条形图以 "O "开始,在时间框架的收盘时结束。例如,当前的时间框架是H1,在12.00显示 "0",在13.00显示 "+20",条形图的读数明显=+20。 但在这一小时内,读数是-50和+60,但指标没有显示,我们应该为低位Buffer[i]和高位Buffer[i]添加一个缓冲器。我们不能使用 "高 "和 "低",因为对于写在指标中的每个符号,这些值都是在不同的时间出现的。我想让第二个缓冲区在当前图表(H1)上固定小图表(M5)的Buffer[i]的最大值,第三个缓冲区在当前图表(H1)上固定小图表(M5)的Buffer[i]的最小值。亲爱的,谁能建议什么?

 
vitek2010:

对不起,我不知道如何对文本进行编码

我们不能使用 "高 "和 "低",因为这些值在指标中指定的每个工具的不同时间出现。

每种乐器的关闭是在同一时间发生的,在蜡烛的生命 中?所以这是一个错误的观点,虱子都是在不同时间出现的))))。

 
trader781:
问题是,总是会有一些手数的亏损订单,这些订单也必须由其余的订单来覆盖。触发因素是关闭时间。如果我们哪怕关闭一个,整个链条就会丢失。因此,问题是如何拖出所有选定的平均价格。

因此,我们必须在循环中浏览所有 "必要 "的订单,并计算出这个平均价格。然后,当当前价格 在所需方向上偏离计算出的平均价格时,我们应该再次向循环充电,修改所有订单。

如果我们不想在每个tick上读取平均价格,我们可以只在添加另一个订单时才读取它。

 
Alexey Viktorov:

因此,我们必须在循环中浏览所有 "必要 "的订单,并计算出这个平均价格。然后,当当前价格 在所需方向上偏离计算出的平均价格时,我们应该再次向循环充电,修改所有订单。

如果我们不想在每个tick上读取平均价格,可以只在添加另一个订单时读取。

如果你不介意,请解释一下,当订单网格分布不均匀时(OrderType()<2),我应该如何计算平均价格。这就是全部。
 
Vitalie Postolache:

在蜡烛的生命 中,每件乐器都是在同一时间关闭的?我说的不是ticks,我说的是固定指标缓冲区的最小和最大读数)。

我不是在说ticks,我是说我们应该固定在一个较小的时间框架上计算的指标缓冲区的最小和最大读数,在一个较大的时间框架的间隙,我将尝试在屏幕上显示它 在这种情况下,最小的时间框架是H1(但它有不同的时间框架)。

[img]https://charts.mql5.com/13/642/eurgbp-w1-instaforex-group.png[/img]

我将考虑05.12这一周(红色十字线),上图所示的指标的这个条形图清楚地显示,周末的货币对总的运动是下降了95点,但它没有显示在这一周内有多少点是下降或上升的。

在这个屏幕上,你可以看到本周H1图表上这个指标 的动态。

[img]https://charts.mql5.com/13/642/eurgbp-h1-instaforex-group.png[/img]

指标的最小值是400,然后上升到700,并在160上收盘(两个屏幕上的数字差异并不重要)。

我需要在一个指标中的一个柱状图中的所有这些值,以及最小、最大和收盘(在这种情况下,在维基上)。最好是在你在时间框架的设置中指定的当前时间框架上。

我是通过从mcl5网站上复制mt4 insta做的。

 
trader781:
如果不难,请解释一下,当订单网格分布不均时(OrderType()<2),我如何计算平均价格。这就是全部。

我希望你能想出办法。

for(int i=0; i<OrdersTotal(); i++) {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
   if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY) {
      _BuyProfit+=OrderProfit()+OrderSwap()+OrderCommission(); // совокупный профит  по всем Sell
      _BuyLot+=OrderLots(); //совокупный лот по всем Sell
    }
    if(OrderType()==OP_SELL) {
      _SellProfit+=OrderProfit()+OrderSwap()+OrderCommission(); // совокупный профит  по всем Sell
      _SellLot+=OrderLots(); //совокупный лот по всем Sell
    }
}}}

double TickValue= MarketInfo(_Symbol,MODE_TICKVALUE);

if(_BuyLot  > 0) { BuyAwerage = NormalizeDouble(Bid-(_BuyProfit/(TickValue*_BuyLot))*_Point,_Digits); } else { BuyAwerage=0; }// безубыток buy
if(_SellLot > 0) { SellAwerage= NormalizeDouble(Ask+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits); } else { SellAwerage=0; } // безубыток sell
if(_BuyLot-_SellLot! = 0) { AllAwerage= NormalizeDouble(((_BuyLot>_SellLot)?Bid:Ask)-((_BuyProfit+_SellProfit)/(TickValue*(_BuyLot-_SellLot))*_Point),_Digits); } else { AllAwerage=0; } // общий безубыток
 
Vitaly Muzichenko:

希望你能掌握其中的诀窍。



double TickValue= MarketInfo(_Symbol,MODE_TICKVALUE);


我们能不能谈一谈这个问题?我不明白这段代码的意义。
 
trader781:
我们能不能谈一谈这个问题?

以存款货币 计算的工具价格的最小变化金额

每个工具的点值是不同的,不等于 "1",例如EUR/USD。

 
Vitaly Muzichenko:

以存款货币 计算的工具价格的最小变化金额

每个工具的点值是不同的,不等于 "1",例如EUR/USD。

是的,现在我明白了

事实证明,你也可以设置一个浮动的停止,例如(eqi=balance*1.1)或(eqi=balance*0.9)。

有这样的工具吗?

 
trader781:

是的,现在明白了。

但事实证明,你也可以设置浮动止损,例如(eqi=balance*1.1)或(eqi=balance*0.9)。

有这样的工具吗?

你已经有了一个特定的价格,你只需要使用简单拖网的类似方法进行拖网,但简单拖网是基于头寸的开盘价=OrderOpenPrice(),而这里是基于平均计算价格,并将所有头寸修改为一级。