任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 70

 

亲爱的论坛用户!

请帮助,问题如下。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)。
}

 
添加屏幕截图
 
artmedia70:

不,他们没有。我瞥了一眼你的代码,回答说 "没有看"。你的线。

- 为周期指数 i 分配一个等于水平线总数的值。如果你有3个,周期就会从2到0。不清楚你的周期是什么,但从2到0只会有三个迭代。


是的,嗯...而这正是我所担心的。事情是这样的,没有专门设置的实验,只是通过观察,在有其他物体存在的情况下,它确实起作用。

for(int i=ObjectsTotal(OBJ_HLINE)-1; i>=0; i--) 

而且一目了然,工作正常。但对你所描述的事情也有疑虑。这就是为什么我想澄清这方面的问题。

而且我很高兴你的意见证实了我的假设。我们可以认为,在这个问题上已经实现了确定性。

再次非常感谢您!

 
bistreevseh:


我有一个自定义指标,它是一个直方图,所有的值都是最大的,它只关心直方图中条形的颜色,它没有输入参数,缓冲区2:0-带红条,1-蓝条,我通过帝国方法发现,在0缓冲区,值不改变,而在1改变。如何写交易的标准我不明白,请解释一下,提前感谢。


如果你有指标的源代码,这并不困难:你看一下源代码,找到指标中颜色变化的条件。利用它们,我们形成一个信号。有2种方法,第一种是写一个 "包装器",用于分析缓冲区数值变化的条件,这时指标代码不改变,使用iCustom(),第二种是将指标代码转换为可以从智能顾问中调用的函数。这两种方法在网站上的文章中都有描述。

例如,如果你对平滑的Heikin-Ashi指标感兴趣,请翻阅网站--对于这个指标有一个讨论,据我记得,算法的正确性和信号分析都有讨论。它的代码是开放的,在代码库中可以找到(那里有很多)。

如果该指标是一个独特的指标,并且没有源代码,那么事情就复杂得多:逆向工程,顺便说一下,这并不总是值得努力的。

 
VladislavVG:

如果你有指标的源代码,这并不困难:看一下源代码,找到指标中颜色变化的条件。利用它们,我们形成一个信号。有2种方法:第一种--通过写一个 "包装器 "来分析缓冲区数值变化的条件,指标代码不改变,使用iCustom();第二种--将指标代码转换成可以从专家顾问中调用的函数。这两种方法在网站上的文章中都有描述。

例如,如果你对平滑的Heikin-Ashi指标感兴趣,请翻阅网站--对于这个指标有一个讨论,据我记得,算法的正确性和信号分析都有讨论。它的代码是开放的,在代码库中可以找到(那里有很多)。

如果该指标是一个独特的指标,并且没有源代码,那么事情就复杂得多:逆向工程,顺便说一下,这并不总是值得努力的。


非常感谢你,我将会试一试。你能不能帮我找到关于 "包装 "和转换指标代码的文章,因为我恐怕无法将其解释为搜索查询。
 
请给予帮助。该指标画出 前一天的高点和低点线。我每天都需要它在历史上画线。谢谢你。
附加的文件:
line.mq4  3 kb
 
prom18:
请给予帮助。该指标画出前一天的高点和低点线。我每天都需要它在历史上画线。谢谢你。
附加的文件:
line_1.mq4  3 kb
 
bistreevseh:

非常感谢你,我将尝试一下。你能不能帮我找到关于 "包装器 "和转换指标代码的文章,因为我恐怕无法将其解释为一个搜索查询。


https://www.mql5.com/ru/forum/114117 这里是一个创建包装函数解释指标信号的例子

这里有关于使用指标代码的文章。

https://www.mql5.com/ru/articles/1456

https://www.mql5.com/ru/articles/1457

 
Vinin:



谢谢你!
 
VladislavVG:


https://www.mql5.com/ru/forum/114117 这里是一个创建包装函数解释指标信号的例子

这里有关于使用指标代码的文章。

https://www.mql5.com/ru/articles/1456

https://www.mql5.com/ru/articles/1457


再次,非常感谢你。