如何编码? - 页 132

 

在此EA中添加头寸

你好。

首先我必须表示歉意,因为英语不是我的母语。

我怎样才能修改这个EA,告诉他只要RSI超过67,就在收盘时加仓(买入0.1手),只要RSI低于33就卖出?

比如说

收盘时间 RSI

17:31 1.3855 69.3 ---> 买入0.1手

17:32 1.3858 70.5 ---> 买入 0.1

17:33 1.3849 66.8 ---> 没有行动

17:34 1.3856 68.4 ---> 买入 0.1

总仓位+0.03

卖空的情况也一样。

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

//| 这个MQL是由专家顾问生成器生成的。

//|MetaTrader 4的专家顾问生成器

//| |

//|在任何情况下,作者都不会对任何损失负责。 |

//| 使用风险自负。 |

//| |

//+-------------------,不要删除这个头文件--------------------+。

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

外部int MagicNumber = 0;

extern bool SignalMail = False;

外部 bool EachTickMode = False;

外置双倍数 Lots = 0.1;

extern int Slippage = 3;

外部 bool UseStopLoss = False;

外置 int StopLoss = 30;

外置 bool UseTakeProfit = False;

外置 int TakeProfit = 60;

外部 bool UseTrailingStop = False;

外置 int TrailingStop = 30;

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;

如果(EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

订单 = SIGNAL_NONE;

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

//| 变量开始 |

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

double Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

double Buy1_2 = 67;

double Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

双份Sell1_2 = 33;

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

//| 变量结束 |

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

//检查仓位

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){

//关闭

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

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

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

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

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

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

如果(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(UseTrailingStop && 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 {

//关闭

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

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

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

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

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

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

如果(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(UseTrailingStop && 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) Order = SIGNAL_BUY;

如果(Sell1_1 < Sell1_2) Order = SIGNAL_SELL;

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

//| 信号结束 |

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

//买入

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

if(!IsTrade) {

//检查自由保证金

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

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

return(0);

}

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

if (UseTakeProfit) 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 (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) 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);

}

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

非常感谢您的帮助

帕努尔戈

 

如何在当日获利后停止交易?

你好。

我有一个问题。我将编码一个EA。

当当天的利润达到20PIP时,EA不应该在第二天之前打开任何订单。

请帮助我。

谢谢

外汇新手

 
fxbeginner:
你好。

我有一个问题。我将编码一个EA。

当当天的利润达到20PIP时,EA应该在第二天之前不开任何订单。

请帮助我。

一个想法是不允许在当天的第一个订单后进行交易。在ordersend()函数 之后,放置一个 "trade = false;"

然后在每个新的一天重置交易津贴。

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- 这是新的一天

timeprev = iTime(Symbol(),PERIOD_D1,0);

trade = true; }

然后当你检查你的信号时。

if(trade) { 你的交易条件在这里 }

只是一个例子 ...

斐路费(FerruFx

 

隐藏订单

我如何编写EA的代码来隐藏所有的买入或卖出止损单,以避免经纪商的窥视。目前的EA有买入止损和卖出止损的挂单。

谢谢

冯小刚

 
LazyForex:
我如何编写EA的代码来隐藏所有的买入或卖出止损单,以避免经纪人的窥视。目前的EA有买入止损和卖出止损的挂单。

谢谢

LF

在EA中记录买入止损和卖出止损值,一旦价格越过买入止损水平,就发送一个买入指令,反之则发送卖出止损。

 
Devil2000:
在EA中记录买入止损点和卖出止损点的数值,一旦价格越过买入止损点,就发送一个买入订单,反之则发送卖出止损点。

谢谢。给你发了一个PM

 

告诉EA停止工作

大家好。

经过近7天的试验和错误、剪切和粘贴以及数小时的研究,我几乎完成了我的第一个EA....。

谁能告诉我如何向EA发出退出或停止功能

我想让EA删除所有当前和待定的交易,并在权益达到10,000后退出。 下面是到目前为止代码的这一部分。

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

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

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

正如你所看到的,EA查看了净值,然后将StopTrade变量的bool值设置为true。 然后EA确认该命令,在StopTrade != true的情况下,在一个周期内不处理任何事情,但随后StopTrade的bool值被重置,我想交易继续进行。

首先,我是否有办法让它以我现在的方式做我需要做的事情?

其次,是否有一个函数可以让我简单地告诉EA退出?

非常感谢所有的帮助。

 

这段代码有什么问题?

谁能告诉我为什么我的EA中的这个命令会产生一个错误?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

移动 我的帖子并没有帮助。

我不能使用神奇的数字,因为我在8个不同的货币对上运行同一个EA。我的原帖在哪里,我可以跟踪它?

 

这段代码有什么问题?

谁能告诉我为什么我的EA中的这个命令会产生错误?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

我的挂单 被放置,并返回分配给bTicket的票号,但随后bTicket在我的OrderSelect()中不起作用。 我得到一个错误的0返回。 我试着用SELECT_BY_POS来引用,并将返回的票号分配给bTicket,效果很好,但没有办法知道我所有订单的位置号是什么,只能运行脚本。非常感谢任何帮助。