[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 567 1...560561562563564565566567568569570571572573574...1145 新评论 DDFedor 2010.05.20 19:50 #5661 Catrock писал(а)>> 另一个来自初学者的问题。 我在我的专家顾问中使用了几个用户定义的函数。我怎样才能使这些函数组合成一个库,并在专家顾问的正文中从那里调用它们。 我对这方面的语言语法并不熟悉。 请参考文档或教程部分。我没有在那里找到它。 https://book.mql4.com/ru/build/structure https://www.mql5.com/ru/articles/1462 + 最重要的是...https://book.mql4.com/ru/appendix/examples gince 2010.05.20 20:15 #5662 如何编写一个函数来检查一个头寸是否是或已经 在零条上打开(最好是选择时间框架。OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1),或者说这个函数就是这样。按照我的理解,它只会在此刻开仓,但如果是开仓并已经平仓,则会返回-1。 //+----------------------------------------------------------------------------+ //|返回最后开仓的栏位号或-1。| //| 参数。| //| sym - 仪器名称 ( "" - 当前符号 ) | //| tf - 时间框架 ( 0 - 当前时间框架 ) | //| op - 操作 ( -1 - 任何位置 ) | //| mn - 魔术数字 ( -1 - 任何魔术 ) | //+----------------------------------------------------------------------------+ int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if(sym="") sym=Symbol(); for(i=0; ik; i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) { if(OrderSymbol()==sym) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(op0 || OrderType()==op) { if(mn0 || OrderMagicNumber()==mn) { if(otOrderOpenTime() ) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); } //+----------------------------------------------------------------------------+ [WARNING CLOSED!] Any newbie 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Владимир Тезис 2010.05.20 20:31 #5663 我们需要两个周期。在第一种情况下,我们通过订单历史,在第二种情况下,我们通过当前的订单。在这两种情况下,如果订单打开的时间大于或等于Time[0],那么该订单是在当前的蜡烛上打开。这对所有的时间框架都是如此。 gince 2010.05.20 20:41 #5664 drknn >>: Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов. 谢谢你的点击。你能否在代码中要求这样做 Владимир Тезис 2010.05.20 20:54 #5665 gince >>: Спадибо, что аткликнулся. А можно попросить это в коде 下面是一个历史段落的例子 //=========== SchSellHist() =============================== // Функция возвращает количество Sell-ордеров, лежащих в истории сегодняшних торгов // SchSell - счётчик Sell ордеров //----------------------------------------------------------- int SchSellHist(int MAGIC){ string SMB=Symbol(); int SchSell=0; int i; for (i=OrdersHistoryTotal()-1;i>=0;i--){ if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { WriteError(i);} else { if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} if(OrderType()==OP_SELL){ if(OrderOpenTime()>=Time_D0){// сегодняшний ордер SchSell++; } } } } return(SchSell); } //================================================================================================== 试着想出你自己的代码,尤其是当你面前有算法和现成的例子时。 [Deleted] 2010.05.20 20:59 #5666 大家好!请帮助我理解代码,它工作后,很多垃圾被留在图表的箭头圈线上,如何删除它们或让它自己删除,这里是代码的一部分。 [Deleted] 2010.05.20 21:22 #5667 void seta(string a_name_0, int a_window_8, double a_datetime_12, double a_price_20, int ai_28, color a_color_32, int a_width_36) { ObjectDelete(a_name_0)。 ObjectCreate(a_name_0,OBJ_ARROW, a_window_8, a_datetime_12, a_price_20) 。 ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28)。 ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32)。 ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36)。 } void _setabuy(string as_0) { g_str_concat_356 = StringConcatenate(as_0, gi_120)。 seta(g_str_concat_356, 0, TimeCurrent(), Bid + 15.0 * Point, SYMBOL_ARROWUP, Blue, 2) 。 gi_120++; } void _setasell(string as_0) { g_str_concat_356 = StringConcatenate(as_0, gi_120)。 seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Point, SYMBOL_ARROWDOWN, Red, 2) 。 gi_120++; } [WARNING CLOSED!] Any newbie How to draw an Very simple Arrow, please gince 2010.05.20 21:51 #5668 drknn >>: Вот пример прохода по истории Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами. 谢谢你。我会试一试的。 Dimitry 2010.05.20 22:16 #5669 drknn >>: Вот пример прохода по истории Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами. 或者这里有一个函数,可以检查是否在当前条形上开仓(对OrdersTotal()和OrdersHistoryTotal()进行检查)。如果一个类型的订单被打开,返回true。 bool CheckExists(int Type) { bool Result = True; for(int i = 0; i < OrdersTotal(); i++) if(OrderSelect(i, SELECT_BY_POS)) if(OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) if(OrderOpenTime() >= Time[0]) Result = False; for(i = 0; i < OrdersHistoryTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) if(OrderType() == Type && OrderOpenTime() >= Time[0] && OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) Result = False; } return(Result); } [Deleted] 2010.05.21 12:19 #5670 请告诉我如何实现这个条件。 如果(有挂单),就做这个和那个。 1...560561562563564565566567568569570571572573574...1145 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
另一个来自初学者的问题。
我在我的专家顾问中使用了几个用户定义的函数。我怎样才能使这些函数组合成一个库,并在专家顾问的正文中从那里调用它们。
我对这方面的语言语法并不熟悉。
请参考文档或教程部分。我没有在那里找到它。
https://book.mql4.com/ru/build/structure
https://www.mql5.com/ru/articles/1462
+ 最重要的是...https://book.mql4.com/ru/appendix/examples
如何编写一个函数来检查一个头寸是否是或已经 在零条上打开(最好是选择时间框架。OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1),或者说这个函数就是这样。按照我的理解,它只会在此刻开仓,但如果是开仓并已经平仓,则会返回-1。
//+----------------------------------------------------------------------------+
//|返回最后开仓的栏位号或-1。|
//| 参数。|
//| sym - 仪器名称 ( "" - 当前符号 ) |
//| tf - 时间框架 ( 0 - 当前时间框架 ) |
//| op - 操作 ( -1 - 任何位置 ) |
//| mn - 魔术数字 ( -1 - 任何魔术 ) |
//+----------------------------------------------------------------------------+
int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1)
{
datetime oot;
int i, k=OrdersTotal();
if(sym="")
sym=Symbol();
for(i=0; ik; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) )
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==mn)
{
if(otOrderOpenTime() ) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
//+----------------------------------------------------------------------------+
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
谢谢你的点击。你能否在代码中要求这样做
Спадибо, что аткликнулся. А можно попросить это в коде
下面是一个历史段落的例子
试着想出你自己的代码,尤其是当你面前有算法和现成的例子时。
ObjectDelete(a_name_0)。
ObjectCreate(a_name_0,OBJ_ARROW, a_window_8, a_datetime_12, a_price_20) 。
ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28)。
ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32)。
ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36)。
}
void _setabuy(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120)。
seta(g_str_concat_356, 0, TimeCurrent(), Bid + 15.0 * Point, SYMBOL_ARROWUP, Blue, 2) 。
gi_120++;
}
void _setasell(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120)。
seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Point, SYMBOL_ARROWDOWN, Red, 2) 。
gi_120++;
}
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
谢谢你。我会试一试的。
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
或者这里有一个函数,可以检查是否在当前条形上开仓(对OrdersTotal()和OrdersHistoryTotal()进行检查)。如果一个类型的订单被打开,返回true。
请告诉我如何实现这个条件。
如果(有挂单),就做这个和那个。