问吧! - 页 11

 

你说的是要有一个脚本或什么东西来作为服务器,以便于EA能够沟通。 我想,metaquotes需要一段时间才能想出这样的办法。 然而,在mql4.com上,他们说我所说的函数,GlobalVariableSetOnCondition()是原子式执行的。 有了这个,我也许可以想出一组函数来做我需要的事情。

 
 

帮助 -零除法

嗨,所有的编码员...

我应该怎么做才能解决这个错误:零除法?

谢谢你的帮助...

附加的文件:
ok.gif  16 kb
error.gif  16 kb
ttm_stoch.mq4  5 kb
 

jma

你好codersguru。

我可以在EA代码中使用jma而不是ema吗?

 
 

需要帮助 - 调整后的MACD

我试图创建一个指标,根据RSI的值来调整信号线。真的,我想在MACD上画出另一条调整后的信号线,并将常规的信号线留在原地。

编辑。

我让指标在同一窗口中画出RSI线(第一步)。但由于某些原因,它不能画出最后一期。请看附件。

附加的文件:
 

任何帮助都将是巨大的

以下是我遇到问题的代码:////,当我在Northfinace上加载它时,它可以工作,然后再也没有进行交易......但它在Interbank上没有任何作用......它是一个使用kama的反转系统,0.0005是反转点......我不知道发生了什么,因为当我第一次加载它时,它在Northfinance上进行了一次完美交易,但这是一个现有的交易,应该已经进行了......

 

的代码

#属性版权 "专家顾问生成器"

#属性链接 "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

外部int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

外置双数 Lots = 1;

extern int Slippage = 3;

extern bool StopLossMode = True;

外置 int StopLoss = 40;

外部 bool TakeProfitMode = False;

extern int TakeProfit = 60;

外部 bool TrailingStopMode = True;

外置 int TrailingStop = 35;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

int BarCount;

int Current;

bool TickCheck = False;

//+------------------------------------------------------------------+

//| 专家初始化函数 |

//+------------------------------------------------------------------+

int init() {

BarCount = Bars;

如果(EachTickMode)Current = 0;否则Current = 1。

return(0);

}

//+------------------------------------------------------------------+

//| 专家去初始化功能|

//+------------------------------------------------------------------+

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| 专家启动功能|

//+------------------------------------------------------------------+

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

订单 = SIGNAL_NONE;

//+------------------------------------------------------------------+

//| 变量开始 |

//+------------------------------------------------------------------+

double Var1 = iCustom(NULL, 0, "KAMATEST", 3, 2, 0.0005, 0, Current + 0)。

double Var2 = iCustom(NULL, 0, "KAMA CCI", 14, 0, Current + 0);

double Var3 = iCustom(NULL, 0, "KAMARSI", 14, 0, Current + 0);

双重Buy1_1 = Var1 ;

双倍Buy1_2 = 25;

双倍Buy2_1 = Var2 ;

双倍Buy2_2 = 80。

双倍Buy3_1 = Var3 ;

双份Buy3_2 = 50。

双份Sell1_1 = Var1 ;

双份Sell1_2 = -25。

双份Sell2_1 = Var2 。

双份Sell2_2 = -80。

双份Sell3_1 = Var3 ;

双份Sell3_2 = -50。

double CloseBuy1_1 = Var1 ;

双份CloseBuy1_2 = -25。

double CloseBuy2_1 = Var2 ;

双倍CloseBuy2_2 = -80。

double CloseBuy3_1 = Var3 ;

双倍CloseBuy3_2 = -50。

double CloseSell1_1 = Var1 ;

双份CloseSell1_2 = 25。

双份CloseSell2_1 = Var2 。

双份CloseSell2_2 = 80。

双份CloseSell3_1 = Var3 。

双份CloseSell3_2 = 50。

//+------------------------------------------------------------------+

//| 变量结束 |

//+------------------------------------------------------------------+

//检查位置

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。

如果(OrderType() <= OP_SELL && OrderSymbol() == Symbol() ) {

IsTrade = True。

如果(OrderType() == OP_BUY){

//关闭

//+------------------------------------------------------------------+

//| 信号开始(退出买入)|

//+------------------------------------------------------------------+

if (CloseBuy1_1 <= CloseBuy1_2 && CloseBuy2_1 <= CloseBuy2_2 && CloseBuy3_1 <= CloseBuy3_2) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| 信号结束(退出购买) |

//+------------------------------------------------------------------+

如果(Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen)。

if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

继续。

}

//拖曳止损

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

如果(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) 。

if (!EachTickMode) BarCount = Bars;

继续。

}

}

}

} else {

//关闭

//+------------------------------------------------------------------+

//| 信号开始(退出卖出)|

//+------------------------------------------------------------------+

if (CloseSell1_1 >= CloseSell1_2 && CloseSell2_1 >= CloseSell2_2 && CloseSell3_1 >= CloseSell3_2) Order = SIGNAL_CLOSESELL;

//+------------------------------------------------------------------+

//| 信号结束(退出卖出)|

//+------------------------------------------------------------------+

如果(Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange)。

如果(SignalMail) SendMail("[信号警报]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False。

继续。

}

//拖曳止损

if(TrailingStopMode && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

如果((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) 。

if (!EachTickMode) BarCount = Bars;

继续。

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

如果(Buy1_1 >= Buy1_2 && Buy2_1 >= Buy2_2 && Buy3_1 >= Buy3_2) Order = SIGNAL_BUY;

如果(Sell1_1 <= Sell1_2 && Sell2_1 = Sell3_2) Order = SIGNAL_SELL;

//+------------------------------------------------------------------+

//| 信号结束 |

//+------------------------------------------------------------------+

//买入

如果(Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (! EachTickMode && (Bars != BarCount))))){

if(!IsTrade) {

//检查自由保证金

如果(AccountFreeMargin() < (1000 * Lots)) {

Print("我们没有钱。Free Margin = ", AccountFreeMargin())。

return(0);

}

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue) 。

如果(Ticket > 0) {

如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY订单打开:", OrderOpenPrice())。

if (SignalMail) SendMail("[信号提示]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("打开买入订单出错。", GetLastError())。

}

}

if (EachTickMode) TickCheck = True;

如果(!EachTickMode) BarCount = Bars;

return(0);

}

}

//卖出

如果(Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))){

if(!IsTrade) {

//检查自由保证金

如果(AccountFreeMargin() < (1000 * Lots)) {

Print("我们没有钱。Free Margin = ", AccountFreeMargin())。

return(0);

}

if (StopLossMode) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink) 。

如果(Ticket > 0) {

如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Sell order opened : " , OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell")。

} else {

Print("错误打开卖出订单。", GetLastError())。

}

}

if (EachTickMode) TickCheck = True;

如果(!EachTickMode) BarCount = Bars;

return(0);

}

}

如果(!EachTickMode) BarCount = Bars;

return(0);

}

//+------------------------------------------------------------------+

 

我改变了专家中的指标值.0005,因为它只显示通道线,最终水平是你需要改变的,25,-25为.0005...30,,-30为.0006,等等...

 

盈亏平衡和追踪止损的问题

你好。

我正在使用Codersguru的MQL4教程学习编码,我正在做 "My_First_EA"。这确实是我的第一个EA。它运行得很好,但我想写一个盈亏平衡止损,但我想不出来。我遇到的问题是,盈亏平衡止损就像拖曳式止损一样跟随价格。我想让最初的止损在我赚取15点时保持1个点的利润(例如),然后我想让止损保持在盈亏平衡点(1个点的利润),直到移动止损在25点利润时开始工作。然后,我希望追踪止损像往常一样,每赚一个点就移动一次。我想问题可能出在 "OrderStopLoss() "上,但我现在什么都不知道了。我的大脑一片混乱。谢谢你

以下是我所做的相关代码。

外来的双倍TrailingStop=25.0。

外设 double BreakEvenProfit=15.0;

外置双倍BreakEvenStop=1;

......................

我在这里的进场和开仓代码运行良好

......................

for (cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)。

如果(OrderType()<=OP_SELL&&OrderSymbol()==Symbol())

{

如果(OrderType()==OP_BUY)//长仓被打开

{

//是否应该平仓?

如果(FSAR > FMA) //我的退出信号

{

//----CLOSE LONG POSITION工作正常

OrderClose(OrderTicket(),OrderLots(),Bid,3, Magenta);

return(0);//exit

}

////////////////////,这是下面的问题区域/////////。

//----检查 盈亏平衡停止多头头寸------

如果(Bid-OrderOpenPrice() > BreakEvenProfit*Point)

{

如果(OrderStopLoss() < OrderOpenPrice()+ BreakEvenStop*Point)

{

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenStop*Point,OrderTakeProfit(),0,Yellow)。

返回(0)。

}

}

//-----,下面的一切都作为典型的追踪止损工作。

//---- 检查跟踪止损的长线位置

如果(TrailingStop>0)

{

如果(Bid-OrderOpenPrice()>Point*TrailingStop)

{

如果(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop, OrderTakeProfit(),0,Yellow)。

返回(0)。

}

}

}

}

否则//进入空头状态