KimIV的有用功能 - 页 114 1...107108109110111112113114115116117118119120121...128 新评论 iava_25 2012.12.05 13:50 #1131 下午好。我还是个编程新手,如果有人能给我点提示。问题。我们有一个或多个未结订单,我们知道它们将以20美元的利润收盘。我们需要知道订单在什么价格下会以20美元的利润关闭。我们计算出开放地段的总体积,然后!请告知如何做到这一点。也许有一个现成的功能?提前感谢。 qwanya 2012.12.10 00:59 #1132 KimIV:使用DistMarketAndPos()的例子。 为什么需要一个函数来确定市场离最近的位置有多远?我看到至少有四个基本选择。 买过或卖过。市场已经朝着我们的方向发展了。而一旦它通过了一些距离,现有的头寸获得了一些利润,我们立即进行存款--在同一方向再次进入。 我们购买或出售。市场朝着我们的方向发展。一旦它走过了一定的距离,而现有的头寸也赚取了一定的利润,我们就会立即意识到,就是这样了!"。逆转就在眼前!是时候翻转了。我们关闭目前的头寸,并在相反的方向开仓。 我们购买或出售。市场已经转向对我们不利。但出于某种原因,我们确信自己是对的,在离最近的进场点有一定距离时,也就是在某种程度的亏损时,我们的平均水平和开盘方向是一致的。 我们购买或出售。市场已经对我们不利。而且我们已经意识到,我们进入市场的方式不正确。因此,我们固定在某一水平的损失上,并在另一方向打开。 如果你想具体实现这些选项中的任何一个,请在这里写下你的请求。我将在我所列举的框架内满足所有要求。 附上一个实验DistMarketAndPos()函数的模板。 你好,KimIV,功能很好,能用,我翻转它,也能用,但我不能连接两半。 int start(){ if (DistMarketAndPos()>150){ OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,Ask+150*Point); } return(0); }int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1) { double d, p; int i, k=OrdersTotal(), r=1000000; if (sy=="" || sy=="0") sy=Symbol(); p=MarketInfo(sy, MODE_POINT); if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01; for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) { if (mn<0 || OrderMagicNumber()==mn) { if (OrderType()==OP_BUY) { d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p; if (r>d) r=NormalizeDouble(d, 0); } if (OrderType()==OP_SELL) { d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p; if (r>d) r=NormalizeDouble(d, 0); } } } } }return (r);} 请为我翻开它,每个人都说它不对,但它很有效。 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Useful features from KimIV Only "Useful features from khorosh 2012.12.24 09:48 #1133 新来的人,请在 专门的主题 中提出你的问题。 Igor Kim 2013.03.09 13:33 #1134 新版本的Message()函数。自本文 发表以来,Message() 函数已经经历了两次修改。第一个变化是增加了通过Print() 禁止向专家日志输出的可能性,以及只输出一系列类似信息中的第一个信息的可能性。第二个变化是增加了输出方向,即除了现有的Comment() 和Print() 函数之外,还使用了Alert()、SendMail() 和SendNotification()。我所发表的是后一种变化。Message() 函数被设计用来在不同方向上输出文本信息。它既可用于调试目的,也可用于现成的应用程序,用于解释当前的交易情况,记录程序运行情况,及时通知交易者重要的变化,等等。该函数接受三个参数,其中最后两个是可选的。ms- 字符串,要输出的文本信息,传送。nv- 一串标志,指定信息输出的方向。五面旗帜是五个重要的地方。每个带零的标志面打开,一个关闭一个特定的输出方向。从左到右依次是警报、评论、打印、SendMail和SendNotification。默认值是 "01100",即评论和打印被启用,其他被禁用。am- 逻辑的,True- 输出所有的信息,False- 从一系列相同的信息中只输出第一条。默认值为"假"。关于警报和打印输出方向(空格1和3),应该注意的是,它们能够逐行输出信息。也就是说,如果信息文本中有一个换行符--控制字符"\n",那么每一行都将被独立打印。试试附件中的测试脚本,我想你会喜欢的:-)//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 08.03.2013 | //| Описание : Вывод текстового сообщения. | //+----------------------------------------------------------------------------+ //| Параметры: | //| ms - текст сообщения | //| nv - флаги направлений вывода сообщения: (0-выкл, 1-вкл) | //| Alert, Comment, Print, SendMail, SendNotification | //| am - флаг всех повторяющихся сообщений | //+----------------------------------------------------------------------------+ void Message(string ms, string nv="01100", bool am=False) { static string prevMessage=""; string as[]; int i, k; if (StrToInteger(StringSubstr(nv, 1, 1))==1) Comment(ms); if ((StringLen(ms)>0) && (am || prevMessage!=ms)) { if (StrToInteger(StringSubstr(nv, 0, 1))==1) { k=StrSplit(ms, as, "\n"); for (i=0; i<k; i++) Alert(as[i]); } if (StrToInteger(StringSubstr(nv, 2, 1))==1) { k=StrSplit(ms, as, "\n"); for (i=0; i<k; i++) Print(as[i]); } if (StrToInteger(StringSubstr(nv, 3, 1))==1) SendMail(WindowExpertName(), ms); if (StrToInteger(StringSubstr(nv, 4, 1))==1) SendNotification(ms); prevMessage=ms; } }附上一个测试Message()函数的脚本。 附加的文件: test_message.mq4 4 kb 测试交易策略 MQL5中的错误处理和日志记录 MQL5 细则手册:MetaTrader 5 交易事件的声音通知 sv_ 2013.03.09 13:38 #1135 KimIV:新版本的Message()函数。自本文 发表以来,Message() 函数已经经历了两次修改。第一个变化是增加了通过Print() 禁止向专家日志输出的可能性,以及只输出一系列类似信息中的第一个信息的可能性。第二个变化是增加了输出方向,即除了现有的Comment() 和Print() 函数之外,还使用了Alert()、SendMail() 和SendNotification()。我所发表的是后一种变化。Message() 函数被设计用来在不同方向上输出文本信息。它既可用于调试目的,也可用于现成的应用程序,用于解释当前的交易情况,记录程序运行情况,及时通知交易者重要的变化,等等。该函数接受三个参数,其中最后两个是可选的。ms- 字符串,要输出的文本信息,传送。nv- 一串标志,指定信息输出的方向。五面旗帜是五个重要的地方。每个带零的标志面打开,一个关闭一个特定的输出方向。从左到右依次是警报、评论、打印、SendMail和SendNotification。默认值是 "01100",即评论和打印被启用,其他被禁用。am- 逻辑的,True- 输出所有的信息,False- 从一系列相同的信息中只输出第一条。默认值为"假"。关于警报和打印输出方向(位置1和3),应该注意的是,它们能够逐行输出信息。换句话说,如果信息文本中有一个换行符--控制字符"/n",那么每一行将被独立打印。试试附件中的测试脚本,我想你会喜欢的:-)附上一个测试Message()函数的脚本。 你是否在你的OpenPosition函数中加入了停止播放检查? Igor Kim 2013.03.24 06:54 #1136 sv.: 你是否在你的OpenPosition函数中加入了对停止平移的检查? 不......你指的是什么样的检查?好吧,让我们说,停止和采取的检查失败,该怎么办?有一些选择。请勿打开。调整停止和撤离。 sv_ 2013.03.24 07:18 #1137 KimIV: 不......你指的是什么样的检查?好吧,让我们说拦截和拍摄没有通过检查,你会怎么做?有一些选择。请勿打开。调整停止和采取。 你可以在第1项和第2项之间引入一个自定义开关。 按照这个模式。 int modeSetOrders = 1; // Способ установки ордеров: // 0 - по заданной цене // 1 - скорректировать цены // 2 - вход по текущим ценам Igor Kim 2013.03.25 02:28 #1138 测试脚本中的OpenPosition() 函数的新版本。有什么新鲜事?1.当错误130无效止损和NumberOfTry>1变量的值被设置时,该函数将尝试把止损和止盈的价格水平调整到相对于OP_SELL的Bid和OP_BUY的Ask的MODE_STOPLEVEL+MODE_SPREAD的值。请注意。NumberOfTry 全局变量 必须大于1 才能触发价格水平的修正。 这是由于第一次尝试开仓会发现错误130并修正价格水平,而第二次及以后的尝试开仓则是修正后的水平。 附加的文件: test_openposition.mq4 16 kb Paladin80 2013.03.25 08:13 #1139 KimIV,很高兴看到你带着新功能回到这里。 Андрей Шадрин 2013.03.29 09:28 #1140 下午好。 是否有可能用一些简单的函数来补充KimIV的有用函数库,如.NET和.NET。 1.开盘价,通过一些标准位置(符号、类型、手数、神奇数字)选择。这个价格可以存储在全局变量中,并作为一定的价格水平,从中可以建立专家顾问的算法。返回根据头寸或订单的某些标准(符号、类型、手数、神奇数字)选择的票据。票据是一个重要的标识符,它可以在任何地方使用,甚至作为存在的标志。这样的简单功能越多,就越容易找到最适合你的功能,而不用担心在修改现有功能时犯错。 谢谢你的职能。 1...107108109110111112113114115116117118119120121...128 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下午好。
我还是个编程新手,如果有人能给我点提示。
问题。我们有一个或多个未结订单,我们知道它们将以20美元的利润收盘。
我们需要知道订单在什么价格下会以20美元的利润关闭。
我们计算出开放地段的总体积,然后!
请告知如何做到这一点。
也许有一个现成的功能?
提前感谢。
使用DistMarketAndPos()的例子。
为什么需要一个函数来确定市场离最近的位置有多远?我看到至少有四个基本选择。
如果你想具体实现这些选项中的任何一个,请在这里写下你的请求。我将在我所列举的框架内满足所有要求。
附上一个实验DistMarketAndPos()函数的模板。
你好,KimIV,功能很好,能用,我翻转它,也能用,但我不能连接两半。
int start()
{
if (DistMarketAndPos()>150)
{
OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,Ask+150*Point);
}
return(0);
}
int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1) {
double d, p;
int i, k=OrdersTotal(), r=1000000;
if (sy=="" || sy=="0") sy=Symbol();
p=MarketInfo(sy, MODE_POINT);
if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
if (r>d) r=NormalizeDouble(d, 0);
}
if (OrderType()==OP_SELL) {
d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
if (r>d) r=NormalizeDouble(d, 0);
}
}
}
}
}
return (r);
}
新版本的Message()函数。
关于警报和打印输出方向(空格1和3),应该注意的是,它们能够逐行输出信息。也就是说,如果信息文本中有一个换行符--控制字符"\n",那么每一行都将被独立打印。试试附件中的测试脚本,我想你会喜欢的:-)
新版本的Message()函数。
关于警报和打印输出方向(位置1和3),应该注意的是,它们能够逐行输出信息。换句话说,如果信息文本中有一个换行符--控制字符"/n",那么每一行将被独立打印。试试附件中的测试脚本,我想你会喜欢的:-)
你是否在你的OpenPosition函数中加入了对停止平移的检查?
不......你指的是什么样的检查?好吧,让我们说,停止和采取的检查失败,该怎么办?有一些选择。
不......你指的是什么样的检查?好吧,让我们说拦截和拍摄没有通过检查,你会怎么做?有一些选择。
测试脚本中的OpenPosition() 函数的新版本。
有什么新鲜事?
1.当错误130无效止损和NumberOfTry>1变量的值被设置时,该函数将尝试把止损和止盈的价格水平调整到相对于OP_SELL的Bid和OP_BUY的Ask的MODE_STOPLEVEL+MODE_SPREAD的值。
请注意。
NumberOfTry 全局变量 必须大于1 才能触发价格水平的修正。 这是由于第一次尝试开仓会发现错误130并修正价格水平,而第二次及以后的尝试开仓则是修正后的水平。
下午好。
是否有可能用一些简单的函数来补充KimIV的有用函数库,如.NET和.NET。
1.开盘价,通过一些标准位置(符号、类型、手数、神奇数字)选择。这个价格可以存储在全局变量中,并作为一定的价格水平,从中可以建立专家顾问的算法。
返回根据头寸或订单的某些标准(符号、类型、手数、神奇数字)选择的票据。票据是一个重要的标识符,它可以在任何地方使用,甚至作为存在的标志。
这样的简单功能越多,就越容易找到最适合你的功能,而不用担心在修改现有功能时犯错。
谢谢你的职能。