bool Trade (int signal)
{
int total = OrdersTotal() - 1;
FindOrders();
if(signal == SIGNAL_BUY) // Если сигнал на покупку и открытых ордеров нет..if(!OpenBuy()) // открываем лимитный ордер на покупкуreturn(false);
if(signal == SIGNAL_SELL) // Если сигнал на продажу и открытых ордеров нет..if(!OpenSell())
return(false); // открываем лимитный ордер на продажуif(OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
{
if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
OrdersModifying(); // Модифицируем ордер, добавим SL и TP
}
// if(UseBU == true)// MovingStopLossToBU(); // Перевод в б.у. по достижению некоторого значения TPreturn(true);
}
你在Trade()函数中没有选择一个订单。
顺便说一下。在Trade() 函数中选择一个订单的意义是什么?我正在调用 OrdersModifying() 函数,其中订单被选中并在那里被修改。也就是说,最初的变体是正确的!
有了这个。这里是修复。
而修改功能就在这里。
奇怪的是,在输出上又没有任何停顿和取舍。
OrderSelect(g_ticket,SELECT_BY_TICKET)在行前 if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
History, History_Draw - 它们在测试期间像专家顾问一样工作。
你需要像这样的东西来观察历史上按给定参数进行的修正
在历史上还是在图表上?如果是,那么你想在图表窗口中看到什么样的数据,在一个单独的窗口中,打印成表格,以 不同颜色的蜡烛的形式,或以连接运动开始和结束的线?
OrderSelect(g_ticket,SELECT_BY_TICKET)在行前 if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
这就是我所做的。
没有停止和接管的情况。日志上写着错误130,说止损点是错误的。我看不出有什么原因。
这就是我所做的。
没有停止和接管的情况。日志说错误130,说是止损点不对。我看不出有什么原因。
没有ifs,只要OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES);,你就可以把它留在OrdersModifying()里。
//+------------------------------------------------------------------+
空白的订单修改()
{
OrderSelect(g_ticket,SELECT_BY_TICKET,MODE_TRADES)。
如果(g_type == OP_BUY)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits); // If stop loss input parameter is not 0
// 获取所选订单 的止损值。
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits); // 如果TakeProfit输入参数不等于0,那么。
//获得所选订单的TakeProfit值
}
如果(g_type == OP_SELL)
{
if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits); // 如果停止损失的输入参数不是0
// 获取所选订单的止损值。
if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits); // 如果TakeProfit输入参数不等于0,那么。
//获得所选订单的TakeProfit值
}
如果(sl != 0 || tp !)= 0)// 如果得到的sl和tp的值不等于0,那么。.
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime); // 修改订单。
}
}
MT4的Symbol()问题。
2个功能来说明。
执行第一个命令会输出一个空字符串。
但第二个函数输出一个字符串ID "EURUSD"(嗯,取决于图表,但输出,尽管根据函数的逻辑,它应该是一个空字符串)。
帮助我了解什么是错的?谢谢你
在声明你的变量时,你不能使用保留的名称(value),要调用_value
这就是我所做的。
没有停止和接管的情况。日志上写着错误130,说止损点是错误的。我看不出有什么原因。
他们也不会这样做!
维塔利,我按你说的做了,但没有任何变化。显然,这个错误被埋在其他地方。
之前我拥有一切(开仓订单--当达到设定的价格水平时,修改并转移到b.w.),一切都在运作。它是这样的。
现在,当我把一切都分解成具体的专门功能时,一切都停止了工作,太多。我两种方法都试过了,没有任何效果。 停顿没有设置。
他们也不会这样做!
这里面的逻辑是什么?我想了解...这里有一个函数。
如果输入变量i_sl 和i_tp 不等于零,我们就会得到已经在订单中的停止和取货价格--sl 和tp。之后,我将检查我们是否在这里 计算了sl和tp (如果是短线)。
如果获得了这些值,那么它们就不可能是零......因为它们会被改变!这些是我们按代码上下文依次得到的变量。
在这里,我检查了我们是否找到了停止和获取的价值。在所有的条件下,它们怎么可能是零?
首先在开始时建立你的逻辑,然后做函数、文件等。
为什么要把你的左手抓到右耳后面!?