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

 
Valeriy Yastremskiy:

票据上的OrderSelect已经提前进行了。该命令正在等待中。除了在每个tick上检查订单类型 外,如何让订单成为可销售的?在日志中,这个时间被记录下来,但似乎订单结构中没有提供这个时间的字段,还是我错了?当我们改变订单类型时,OrdersTotal()和OrdersHistoryTotal也不会改变,如果我理解正确的话。

其余的问题在我看来都很清楚)

你试过OrderOpenTime吗? 我甚至不记得它是否在头寸被触发时发生变化。

我不知道什么时候需要检查挂单是否在每一个tick(而不是在关键动作前或每1...5分钟)触发,但MT4没有其他方法。

在MT5中,它更方便。在OTT中,你发现了交易,如果你需要处理列表,你就在OTT中进行处理。

 
datetime some_time=TimeCurrent();

extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)

extern double P=15;       //Таймфрейм

int start()

{

//Инициализация переменных

bool  FractalsUp=false;

bool  FractalsDown=false;

int   FractalsUpPrice=0;

int   FractalsDownPrice=0;

int   FractalsLimit=100;

double EMA=iMA(NULL,P,5,3,MODE_EMA,PRICE_CLOSE,0);

   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.

   for (int i=FractalsLimit; i>=0; i--)

{

      //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.

      double fu=iFractals(NULL,0,MODE_UPPER,i);

      double fl=iFractals(NULL,0,MODE_LOWER,i);

      //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.

      if(fu>0)

{

FractalsUp=true;

FractalsDown=false;

FractalsUpPrice=fu;



if (((Close[0])>fu)&&(OrdersTotal() == 0)&&(Close[0]>Open[0])&&(Close[0]>High[1]&&(Close[0]>EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd=OrderCloseTime();

int hd=+iBarShift(Symbol3,P,Cd)+1;

if (hd<=2)

{

return(-1);

}

}



metka1();

}

}

//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.

      if(fl>0)

{

FractalsUp=false;

FractalsDown=true;

FractalsDownPrice=fl;

if (((Close[0])<fl)&&(OrdersTotal() == 0)&&(Close[0]<Open[0])&&(Close[0]<Low[1]&&(Close[0]<EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd1=OrderCloseTime();

int hd1=+iBarShift(Symbol3,P,Cd1)+1;

if (hd1<=2)

{

return(-1);

}

}

metka2();

}

}

      //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.

      if(fu>0 && fl>0)

{

         FractalsUp=false;

         FractalsDown=false;

         FractalsUpPrice=fu;        

         FractalsDownPrice=fl;

}

}

return(0);

}

int metka1()

{              

int send1=OrderSend(Symbol3,OP_BUY,0.01,Ask,3,Bid-70*Point,Bid+70*Point);

return(0);

}

int metka2()

{                        

int send2=OrderSend(Symbol3,OP_SELL,0.01,Bid,3,Ask+70*Point,Ask-70*Point);

return(0);

}

下午好!

我正在做一个关于分形的猫头鹰。有一个问题。帮助。其本质是这样的。

脚本通过变量[FractalsLimit=100;]从最后100个蜡烛图中搜索最后的顶部或底部分形,如果分形被突破,则开立 买入头寸,反之则开立 卖出头寸。

应该用最后的100个蜡烛图来寻找最大或最小的分叉点,并建立一个位置。这意味着,它只关注最大和最小的分形,不关注最后的分形。

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Mavrin:

你试过OrderOpenTime吗? 我不记得当挂单被触发时它是否会改变。

我不知道什么时候需要检查每一个tick(而不是在关键动作之前或每1...5...分钟)是否有挂单触发,但在MT4中没有其他方法。

在MT5中,它更方便。在OTT中,你学会了进行交易。 如果你需要与列表一起工作,你将在OTT中进行处理。

OrderOpenTime显示挂单开仓的时间。这是一个更多了解操作的问题。因此,时间被写入日志和日记,而不在其他地方显示。尊敬的是,如果我们没有修复它,那么我们可以在以后查看它,根据事实)))))

如果我理解正确的话,这将是MT5中的开仓/交易。虽然我不明白分成订单/交易/位置是一个最佳解决方案,但当然还有更多的数据。

 
Aleksey Mavrin:

它发生了))。1在英文字母l i等的背景下会非常迷失,所以更方便的是称其为后缀001,2...等。

我明白你的意思了)纠正了错误,现在第二个手柄的值是1,0。如果你在第一个句柄里放了一个比第二个句柄大的时间框架,那么第二个句柄的值就是0。你能告诉我,我还需要解决什么问题才能使第二个手柄的值正确吗?

void OnTick()
  {
   double PriceArray[];
   
   int AOhandle = iAO(_Symbol,PERIOD_M15);
   
   ArraySetAsSeries(PriceArray, true);
   
   CopyBuffer(AOhandle, 0, 0, 3, PriceArray);
   
   double AOvalue = NormalizeDouble(PriceArray[0], 6);

   double PriceArray01[];
   
   int AOhandle01 = iAO(_Symbol,PERIOD_H1);
   
   ArraySetAsSeries(PriceArray01, true);
   
   CopyBuffer(AOhandle01, 1, 0, 3, PriceArray01);
   
   double AOvalue01 = NormalizeDouble(PriceArray01[0], 6);
    
   Comment ("Awesome Oscillator Value: ", AOvalue, "\n", "\n",
            "Awesome Oscillator Value: ", AOvalue01);
  }
 
Valeriy Yastremskiy:

OrderOpenTime显示挂单的开仓时间。这是一个更多了解操作的问题。事实证明,时间被记录在日志和日记中,没有反映在其他地方。据此,如果我们没有修好,那么我们只能以后再看,根据事实)))))

你已经提出这个问题一个星期了。 我提出要回顾一下交易策略中的下单原则

但如果这个问题对你来说很重要,用 "打勾 "的方式来 "解决 "它并不是问题。

我可以像所有的初学者一样 "修复",将挂单保存在一个大的数组中,并在一个点到来时检查这些点 - 我已经写了速度,这在测试者或真实交易中都不是关键,但数组并不方便,要保持它们的清洁很烦人 - 这增加了错误...


我想提议研究的是CArrayInt SB https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint

在CArrayInt中,你将添加门票,这种数据类型将允许你轻松地删除 "成为可销售的门票"。


正如我在上面写的那样,准确度--1刻度,检查代码将是最小的。

Valeriy Yastremskiy:

在MT5中,如果我理解正确的话,它将是一个头寸/交易开盘。虽然我不理解将订单/交易/头寸划分为最佳解决方案,但当然还有更多数据。

如果你能为MT5写文章--那么这个讨论有什么意义呢?你写的,平台更强大,功能更强--比较MT4和MT5是没有意义的,登录MT4更容易,但MT5有更多功能

 
Igor Makanu:

你从一周前就开始提出这个问题,我建议你重新考虑交易策略中的下单原则。


我还是不明白。当然,战略是不同的。这个问题来自一个事实,即相当重要的事件只反映在日志中。而且没有人直接回答说,除了订单成为可销售的时间的日志,没有任何地方))))。

而策略的逻辑并不取决于终端。如果逻辑很蹩脚,那么你当然可以编造它,但跛脚不会消失))))。

 
Valeriy Yastremskiy:

这一点仍不清楚。当然,战略是不同的。这个问题来自于一个相当重要的事件只反映在日志中。而且没有人直接回答,除了订单成为市场的时间日志,没有其他地方))))。

重要性...这对你来说确实很重要,在这之前,你写了多少年的策略,以及它是如何工作的,甚至是盈利的;)

通常情况下,不要下很多挂单,跟随市场订单,如果有必要,增加一个挂单 - 挂单变成市场订单

我们使用一切手段--平均法、金字塔法、订单网格法和...和很多...我不记得交易商论坛上的这些滑稽行为,我已经一年多没有读过它们了--我自己的想法比别人的多 ))

 
Igor Makanu:

没有这样的信息--不!!!。

重要性...这对你来说很重要,在此之前,你写了多少年的策略,它就会发挥作用,甚至是盈利;)

作为一项规则,你不应该放置很多挂单,跟随市场订单,如果有必要,添加一个挂单 - 挂单成为市场订单。

我们使用一切手段--平均法、金字塔法、订单网格法和...和很多...如果你不知道,你应该在交易员论坛上阅读这些技巧,我已经一年多没有做了--我自己的想法比别人的多 ))

谢谢))))

马丁和平均数是自欺欺人,令人望而却步(因为你既不能计算也不能预测风险,根据BP属性的定义))))),有时,但只是有时,是合理的))))。

如果策略正确,一个订单就足够了))))。

 
Valeriy Yastremskiy:

如果策略正确,一个订单就足够了))))。

如果在您的TS中,订单的数量 被严格设定,那么您应该不会在确定当前tick上的挂单发生了什么问题。

知道确切的时间不会给你带来任何东西--所有的信息都是在打钩到达时收到的--没有打钩,就没有信息。

 

你好,我面临一个问题,如何从EA中改变一个自定义指标的 参数。问题是,当我改变指标列表中的任何参数时,会创建一个新的副本。 当我进入这些副本的属性时,每个副本都有自己的参数。我越是改变参数,创建的副本就越多。我通过iCustom使用它。

比如说。

#resource "\Indicators\\inicator.ex4"

外部Var1=1。

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

空白的OnTick()

{

int A;

Var1++;

A=iCustom(Symbol(),PERIOD_CURRENT,":: Indicators\indicator",Var1,0,0)。

因此,我们在指标列表中看到。

指标(参数Var1=2时)。

指标(参数Var1=3时)。

指标(参数Var1=4时)。

....等。