voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfitif(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
{
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
CloseOrder();
}
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfitif(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
{
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
CloseOrder();
}
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на покупку |//+-----------------------------------------------------------------------------------------------+void vOrderOpenBuy()
{
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Тикет ордераint iOTi = 0;
iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на продажу |//+-----------------------------------------------------------------------------------------------+void vOrderOpenSell()
{
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Тикет ордера int iOTi = 0;
iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, Slippage, 0, 0, "", Magic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
}
删除了不必要的代码。
,它总是假的。
它是什么意思?
为了能够在不同的TFs上计算出这个数据。
我想知道是否有人通过一个类来实现。
我正在努力理解类的逻辑,这对学习会有很大的帮助。
下午好,你能帮我解决一个问题吗?在M15蜡烛上,有几笔交易连续打开。
我希望打开的交易不超过一个。EA背后的逻辑是,在前一个订单关闭之前,下一个订单不会打开,但有时一系列的交易会在这样一个长蜡烛图上打开。请建议在代码中添加什么来防止这种情况?
代码片段:
嗯...在iOTi中,vOrderModify()总是=1,它不是一个票据,而是OrderSend()操作的一个积极结果,即值 "1"。
谢谢,原来的代码不是我的,所以我不做任何不必要的改动。它的作用和效果。
这是否有助于解决我的问题?
下午好,你能帮我解决一个问题吗?在M15蜡烛图上,有几个交易连续开盘。
我希望打开的交易不超过一个。EA背后的逻辑是,在前一个订单关闭之前,下一个订单不会打开,但有时一系列的交易会在这样一个长蜡烛图上打开。请建议在代码中添加什么来防止这种情况?
代码片段:
我只是想找一个能够分享在专家顾问中实现指标整合经验的人。
为了能够在不同的TFs上计算出这个数据。
我想知道是否有人通过一个类来实现。
我正在努力理解类的逻辑,这对学习会有很大的帮助。
rates_total = Bars time[] = Time[] open[] = Open[] high[] = High[] low[] = Low[] close[] = Close[]
显示OnTick()
谢谢你,原始代码不是我的,所以我没有做任何不必要的改动。它的作用和效果。
这是否以任何方式解决了我的问题?
试试这个, 从OnTick()中 删除 bCheckOrders(),并将其作为高亮显示。
不,我错了,OrderSend()返回一个票据或-1,所以这没有什么问题。
好的。
我会在今后的工作中记住这一点。