任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 70 1...636465666768697071727374757677...1178 新评论 Alexey Semenov 2013.08.10 21:06 #691 亲爱的论坛用户! 请帮助,问题如下。1)如何在代码中规定,使交易,例如在卖出时,在通道的上边界打开,在到达底部时关闭;2)当一个信号应该只打开一个交易;3)当安装EA时,交易立即打开,但你希望交易在到达通道线时才打开。 我将非常感谢您的帮助。 外置双Lots = 0.1。 extern int TakeProfit = 30; // TakeProfit(避免使用负数或零)。 extern int StopLoss = 20; // 买入时的止损水平。 外部 inttern Slippage = 2; // 滑动率 外部字符串 Comment = "Keller"; 外部的inttern Magic = 333。 外部字符串Indi = "指标数据"。 外部字符串 TimeFrame = "当前的时间 框架。 外部int int MA_Period = 10; // 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA extern int Mode_MA = 0; // 0 - Close, 1 - Open, 2 - High, 3 - Low, 4 - Median, 5 - Typical, 6 - Weighted 外部int Price_Type = 5; 双重PriceHigh, PriceLow, SL, TP。 int票。 //+------------------------------------------------------------------+ //|专家初始化功能| //+------------------------------------------------------------------+ int init() { if (Digits ==3 || Digits ==3) // 用于五位数的经纪人 { TakeProfit *= 10。 StopLoss *= 10; 滑移*=10。 } return(0); } //+------------------------------------------------------------------+ //|专家去初始化功能| //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int start() { PriceHigh = iCustom (Symbol(), 0, "Keller", TimeFrame, MA_Period, Mode_MA, Price_Type, 0, 0); // 红色顶部缓冲区 0 PriceLow = iCustom (Symbol(), 0, "Tma", TimeFrame, MA_Period, Mode_MA, Price_Type, 2, 0); // 红色底部缓冲区 2 if (Bid >= PriceHigh && CountSell() == 0) //其中Countsell检查订单是一个接一个地打开,而不是在每一个tick上。 { SL = NormalizeDouble (Bid + StopLoss * Point, Digits); TP = NormalizeDouble (Bid - TakeProfit * Point, Digits); ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Comment, Magic, 0, Red); // 其中0是SL和TP(对于ßn账户,这是0),最后一个0是一个行动。 if (ticket > 0) // 检查是否有未结订单 { 如果(OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // 其中0是一个表达式 } } 如果(Ask <= PriceLow && CountBuy() == 0)//其中Countsell检查订单是一个一个打开的,而不是在每一个tick上。 { SL = NormalizeDouble (Ask - StopLoss * Point, Digits); TP = NormalizeDouble (Ask + TakeProfit * Point, Digits); ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Comment, Magic, 0, Blue); // 其中0是SL和TP(对于ßn个账户来说这是0),最后一个0是一个动作。 if (ticket > 0) // 检查是否有未结订单 { 如果(OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // 其中0是一个表达式 } } if (Bid >= PriceHigh && CountBuy() > 0) // 如果价格已经达到通道的上限,并且订单的数量大于0 { for (int i=OrdersTotal()-1; i >= 0; i--) { 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true) { 如果(OrderMagicNumber() == Magic && OrderType() == OP_BUY) // 检查这是否是我们的买入订单 OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); // 在通道的上边界关闭订单。 } } } 如果(Ask <= PriceLow && CountSell() > 0)//如果价格已经达到通道的下限,并且订单数量大于0 { for ( i=OrdersTotal()-1; i >= 0; i--) // 没有定义购买的变量 { 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true) { if(OrderMagicNumber() == Magic && OrderType() == OP_SELL) // 检查这是否是我们的卖出订单 OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black); // 在通道的下边界关闭订单。 } } } return(0); } //+------------------------------------------------------------------+ int CountSell()//检查 - 正在进行的卖出订单的数量 { int Count = 0。 for (int trade = OrdersTotal() - 1; trade >=0; trade --) { OrderSelect(交易,SELECT_BY_POS,MODE_TRADES)。 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { 如果(OrderType() == OP_SELL) 数++。 } } return(Count)。 } //+------------------------------------------------------------------+ int CountBuy()//检查--正在工作的买入订单的数量 { int Count = 0。 for (int trade = OrdersTotal() - 1; trade >=0; trade --) { OrderSelect(交易,SELECT_BY_POS,MODE_TRADES)。 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { 如果(OrderType() == OP_BUY) 数++。 } } return(Count)。 } 初学者的问题 MQL5 MT5 MetaTrader Any rookie question, so 我将写一个免费的mql4顾问 Alexey Semenov 2013.08.10 21:08 #692 添加屏幕截图 Chiripaha 2013.08.11 01:44 #693 artmedia70: 不,他们没有。我瞥了一眼你的代码,回答说 "没有看"。你的线。 - 为周期指数 i 分配一个等于水平线总数的值。如果你有3个,周期就会从2到0。不清楚你的周期是什么,但从2到0只会有三个迭代。 是的,嗯...而这正是我所担心的。事情是这样的,没有专门设置的实验,只是通过观察,在有其他物体存在的情况下,它确实起作用。 for(int i=ObjectsTotal(OBJ_HLINE)-1; i>=0; i--) 而且一目了然,工作正常。但对你所描述的事情也有疑虑。这就是为什么我想澄清这方面的问题。 而且我很高兴你的意见证实了我的假设。我们可以认为,在这个问题上已经实现了确定性。 再次非常感谢您! Vladyslav Goshkov 2013.08.11 06:43 #694 bistreevseh: 我有一个自定义指标,它是一个直方图,所有的值都是最大的,它只关心直方图中条形的颜色,它没有输入参数,缓冲区2:0-带红条,1-蓝条,我通过帝国方法发现,在0缓冲区,值不改变,而在1改变。如何写交易的标准我不明白,请解释一下,提前感谢。如果你有指标的源代码,这并不困难:你看一下源代码,找到指标中颜色变化的条件。利用它们,我们形成一个信号。有2种方法,第一种是写一个 "包装器",用于分析缓冲区数值变化的条件,这时指标代码不改变,使用iCustom(),第二种是将指标代码转换为可以从智能顾问中调用的函数。这两种方法在网站上的文章中都有描述。 例如,如果你对平滑的Heikin-Ashi指标感兴趣,请翻阅网站--对于这个指标有一个讨论,据我记得,算法的正确性和信号分析都有讨论。它的代码是开放的,在代码库中可以找到(那里有很多)。 如果该指标是一个独特的指标,并且没有源代码,那么事情就复杂得多:逆向工程,顺便说一下,这并不总是值得努力的。 bistreevseh 2013.08.11 07:42 #695 VladislavVG: 如果你有指标的源代码,这并不困难:看一下源代码,找到指标中颜色变化的条件。利用它们,我们形成一个信号。有2种方法:第一种--通过写一个 "包装器 "来分析缓冲区数值变化的条件,指标代码不改变,使用iCustom();第二种--将指标代码转换成可以从专家顾问中调用的函数。这两种方法在网站上的文章中都有描述。 例如,如果你对平滑的Heikin-Ashi指标感兴趣,请翻阅网站--对于这个指标有一个讨论,据我记得,算法的正确性和信号分析都有讨论。它的代码是开放的,在代码库中可以找到(那里有很多)。 如果该指标是一个独特的指标,并且没有源代码,那么事情就复杂得多:逆向工程,顺便说一下,这并不总是值得努力的。 非常感谢你,我将会试一试。你能不能帮我找到关于 "包装 "和转换指标代码的文章,因为我恐怕无法将其解释为搜索查询。 prom18 2013.08.11 07:56 #696 请给予帮助。该指标画出 前一天的高点和低点线。我每天都需要它在历史上画线。谢谢你。 附加的文件: line.mq4 3 kb Victor Nikolaev 2013.08.11 08:56 #697 prom18: 请给予帮助。该指标画出前一天的高点和低点线。我每天都需要它在历史上画线。谢谢你。 附加的文件: line_1.mq4 3 kb Vladyslav Goshkov 2013.08.11 10:01 #698 bistreevseh: 非常感谢你,我将尝试一下。你能不能帮我找到关于 "包装器 "和转换指标代码的文章,因为我恐怕无法将其解释为一个搜索查询。 https://www.mql5.com/ru/forum/114117 这里是一个创建包装函数解释指标信号的例子 这里有关于使用指标代码的文章。 https://www.mql5.com/ru/articles/1456 https://www.mql5.com/ru/articles/1457 prom18 2013.08.11 10:07 #699 Vinin: 谢谢你! bistreevseh 2013.08.11 11:01 #700 VladislavVG: https://www.mql5.com/ru/forum/114117 这里是一个创建包装函数解释指标信号的例子 这里有关于使用指标代码的文章。 https://www.mql5.com/ru/articles/1456 https://www.mql5.com/ru/articles/1457 再次,非常感谢你。 1...636465666768697071727374757677...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
亲爱的论坛用户!
请帮助,问题如下。1)如何在代码中规定,使交易,例如在卖出时,在通道的上边界打开,在到达底部时关闭;2)当一个信号应该只打开一个交易;3)当安装EA时,交易立即打开,但你希望交易在到达通道线时才打开。
我将非常感谢您的帮助。
外置双Lots = 0.1。
extern int TakeProfit = 30; // TakeProfit(避免使用负数或零)。
extern int StopLoss = 20; // 买入时的止损水平。
外部 inttern Slippage = 2; // 滑动率
外部字符串 Comment = "Keller";
外部的inttern Magic = 333。
外部字符串Indi = "指标数据"。
外部字符串 TimeFrame = "当前的时间 框架。
外部int int MA_Period = 10; // 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int Mode_MA = 0; // 0 - Close, 1 - Open, 2 - High, 3 - Low, 4 - Median, 5 - Typical, 6 - Weighted
外部int Price_Type = 5;
双重PriceHigh, PriceLow, SL, TP。
int票。
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // 用于五位数的经纪人
{
TakeProfit *= 10。
StopLoss *= 10;
滑移*=10。
}
return(0);
}
//+------------------------------------------------------------------+
//|专家去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
PriceHigh = iCustom (Symbol(), 0, "Keller", TimeFrame, MA_Period, Mode_MA, Price_Type, 0, 0); // 红色顶部缓冲区 0
PriceLow = iCustom (Symbol(), 0, "Tma", TimeFrame, MA_Period, Mode_MA, Price_Type, 2, 0); // 红色底部缓冲区 2
if (Bid >= PriceHigh && CountSell() == 0) //其中Countsell检查订单是一个接一个地打开,而不是在每一个tick上。
{
SL = NormalizeDouble (Bid + StopLoss * Point, Digits);
TP = NormalizeDouble (Bid - TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Comment, Magic, 0, Red); // 其中0是SL和TP(对于ßn账户,这是0),最后一个0是一个行动。
if (ticket > 0) // 检查是否有未结订单
{
如果(OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // 其中0是一个表达式
}
}
如果(Ask <= PriceLow && CountBuy() == 0)//其中Countsell检查订单是一个一个打开的,而不是在每一个tick上。
{
SL = NormalizeDouble (Ask - StopLoss * Point, Digits);
TP = NormalizeDouble (Ask + TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Comment, Magic, 0, Blue); // 其中0是SL和TP(对于ßn个账户来说这是0),最后一个0是一个动作。
if (ticket > 0) // 检查是否有未结订单
{
如果(OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // 其中0是一个表达式
}
}
if (Bid >= PriceHigh && CountBuy() > 0) // 如果价格已经达到通道的上限,并且订单的数量大于0
{
for (int i=OrdersTotal()-1; i >= 0; i--)
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
如果(OrderMagicNumber() == Magic && OrderType() == OP_BUY) // 检查这是否是我们的买入订单
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); // 在通道的上边界关闭订单。
}
}
}
如果(Ask <= PriceLow && CountSell() > 0)//如果价格已经达到通道的下限,并且订单数量大于0
{
for ( i=OrdersTotal()-1; i >= 0; i--) // 没有定义购买的变量
{
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if(OrderMagicNumber() == Magic && OrderType() == OP_SELL) // 检查这是否是我们的卖出订单
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black); // 在通道的下边界关闭订单。
}
}
}
return(0);
}
//+------------------------------------------------------------------+
int CountSell()//检查 - 正在进行的卖出订单的数量
{
int Count = 0。
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect(交易,SELECT_BY_POS,MODE_TRADES)。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
如果(OrderType() == OP_SELL)
数++。
}
}
return(Count)。
}
//+------------------------------------------------------------------+
int CountBuy()//检查--正在工作的买入订单的数量
{
int Count = 0。
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect(交易,SELECT_BY_POS,MODE_TRADES)。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
如果(OrderType() == OP_BUY)
数++。
}
}
return(Count)。
}
不,他们没有。我瞥了一眼你的代码,回答说 "没有看"。你的线。
- 为周期指数 i 分配一个等于水平线总数的值。如果你有3个,周期就会从2到0。不清楚你的周期是什么,但从2到0只会有三个迭代。
是的,嗯...而这正是我所担心的。事情是这样的,没有专门设置的实验,只是通过观察,在有其他物体存在的情况下,它确实起作用。
而且一目了然,工作正常。但对你所描述的事情也有疑虑。这就是为什么我想澄清这方面的问题。
而且我很高兴你的意见证实了我的假设。我们可以认为,在这个问题上已经实现了确定性。
再次非常感谢您!
我有一个自定义指标,它是一个直方图,所有的值都是最大的,它只关心直方图中条形的颜色,它没有输入参数,缓冲区2:0-带红条,1-蓝条,我通过帝国方法发现,在0缓冲区,值不改变,而在1改变。如何写交易的标准我不明白,请解释一下,提前感谢。
如果你有指标的源代码,这并不困难:你看一下源代码,找到指标中颜色变化的条件。利用它们,我们形成一个信号。有2种方法,第一种是写一个 "包装器",用于分析缓冲区数值变化的条件,这时指标代码不改变,使用iCustom(),第二种是将指标代码转换为可以从智能顾问中调用的函数。这两种方法在网站上的文章中都有描述。
例如,如果你对平滑的Heikin-Ashi指标感兴趣,请翻阅网站--对于这个指标有一个讨论,据我记得,算法的正确性和信号分析都有讨论。它的代码是开放的,在代码库中可以找到(那里有很多)。
如果该指标是一个独特的指标,并且没有源代码,那么事情就复杂得多:逆向工程,顺便说一下,这并不总是值得努力的。
如果你有指标的源代码,这并不困难:看一下源代码,找到指标中颜色变化的条件。利用它们,我们形成一个信号。有2种方法:第一种--通过写一个 "包装器 "来分析缓冲区数值变化的条件,指标代码不改变,使用iCustom();第二种--将指标代码转换成可以从专家顾问中调用的函数。这两种方法在网站上的文章中都有描述。
例如,如果你对平滑的Heikin-Ashi指标感兴趣,请翻阅网站--对于这个指标有一个讨论,据我记得,算法的正确性和信号分析都有讨论。它的代码是开放的,在代码库中可以找到(那里有很多)。
如果该指标是一个独特的指标,并且没有源代码,那么事情就复杂得多:逆向工程,顺便说一下,这并不总是值得努力的。
非常感谢你,我将会试一试。你能不能帮我找到关于 "包装 "和转换指标代码的文章,因为我恐怕无法将其解释为搜索查询。
请给予帮助。该指标画出前一天的高点和低点线。我每天都需要它在历史上画线。谢谢你。
非常感谢你,我将尝试一下。你能不能帮我找到关于 "包装器 "和转换指标代码的文章,因为我恐怕无法将其解释为一个搜索查询。
https://www.mql5.com/ru/forum/114117 这里是一个创建包装函数解释指标信号的例子
这里有关于使用指标代码的文章。
https://www.mql5.com/ru/articles/1456
https://www.mql5.com/ru/articles/1457
谢谢你!
https://www.mql5.com/ru/forum/114117 这里是一个创建包装函数解释指标信号的例子
这里有关于使用指标代码的文章。
https://www.mql5.com/ru/articles/1456
https://www.mql5.com/ru/articles/1457
再次,非常感谢你。