[求助]请问EA里如何才能改成当获利300点时就平仓一半?
请问EA里如何才能改成当获利300点时就平仓一半?
麻烦会的帮我改改,谢谢。
以下是EA
#property copyright "三步曲之一"
#property link "三步曲之一"
/*
*/
extern int 魔术号=8881;
enum 做单方向
{
多空都开=0, 开多=1,开空=2,
};
extern 做单方向 开仓方向=0;
extern int 建仓时段=30;
extern int 建仓MACD快EMA=34;
extern int 建仓MACD慢EMA=55;
extern int 建仓MACDSMA=13;
extern int 趋势时段=240;
extern int 趋势时段短均线=5;
extern int 趋势时段长均线=34;
extern int 趋势MACD快EMA=34;
extern int 趋势MACD慢EMA=55;
extern int 趋势MACDSMA=13;
extern double 止损点数=500;
extern double 止盈点数=9900;
extern double 当获利X点时就平仓一半=300;
extern double 滑点=50;
extern double 下单量=0.1;
extern bool 是否启用追踪止损=true;
extern double 追踪止损点数=750;
string 注释="三步曲之一";
int sj;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int Ticket = -1;
if(开多()&&sj!=iTime(NULL,建仓时段,0)&&(开仓方向==0||开仓方向==1)&&IsNewTFbar30())
{ Ticket=OrderSend(Symbol(),OP_BUY,下单量,Ask,滑点,Ask-止损点数*Point,Ask+止盈点数*Point,注释,魔术号,0,Red);
}
if(开空()&&sj!=iTime(NULL,建仓时段,0)&&(开仓方向==0||开仓方向==2)&&IsNewTFbar30())
{ Ticket=OrderSend(Symbol(),OP_SELL,下单量,Bid,滑点,Bid+止损点数*Point,Bid-止盈点数*Point,注释,魔术号,0,Blue);
}
if(是否启用追踪止损)移动止损();
//----
return(0);
}
//+------------------------------------------------------------------+
bool IsNewTFbar30()
{
static datetime t=0;
if(t!=iTime(NULL,30,0))
{
t=iTime(NULL,30,0);
return(true);
}
return (false);
}
bool 开多()
{
double H4JX51=iMA(NULL,趋势时段,趋势时段短均线,0,MODE_SMMA,PRICE_CLOSE,1);
double H4JX191=iMA(NULL,趋势时段,趋势时段长均线,0,MODE_SMMA,PRICE_CLOSE,1);
double Mzhu1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double Mzhu2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double Mxian1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double Mxian2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
double H4Mzhu1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double H4Mzhu2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double H4Mxian1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double H4Mxian2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
if( H4JX51>H4JX191&& Mzhu1>Mxian1&&Mzhu2H4Mxian1)return(true);//
else return(false);
}
bool 开空()
{
double H4JX51=iMA(NULL,趋势时段,趋势时段短均线,0,MODE_SMMA,PRICE_CLOSE,1);
double H4JX191=iMA(NULL,趋势时段,趋势时段长均线,0,MODE_SMMA,PRICE_CLOSE,1);
double Mzhu1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double Mzhu2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double Mxian1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double Mxian2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
double H4Mzhu1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double H4Mzhu2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double H4Mxian1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double H4Mxian2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
if( H4JX51Mxian2&&H4Mzhu1
else return(false);}
int 持仓单数量()
{ int k=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==魔术号)
{k++;}
}
} return(k);
}
void 平买仓()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symbol()&&OrderType()==OP_BUY&&OrderMagicNumber()==魔术号){
bool result = false;
result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 30, Red );
if(result) Print(Symbol()+"平多单成功!!");
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
}
}}}
}
void 平卖仓()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symbol()&&OrderType()==OP_SELL&&OrderMagicNumber()==魔术号){
bool result = false;
result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 30, Red );
if(result) Print(Symbol()+"平空单成功!!");
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
}
}}}
}
void 移动止损()
{
for (int cnt=0;cnt
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==魔术号)
{
if (OrderType()==OP_BUY)
{
if(Bid>=OrderOpenPrice())
{
if (Bid-OrderStopLoss()>Point*追踪止损点数||OrderStopLoss()==0)
{
bool chenggong= OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*追踪止损点数,OrderTakeProfit(),0,CLR_NONE);
if (chenggong)Print("单号:"+OrderTicket()+"移动止损成功");
}}
}
if (OrderType()==OP_SELL)
{
if(Ask<=OrderOpenPrice())
{
if (OrderStopLoss()-Ask>Point*追踪止损点数||OrderStopLoss()==0){
chenggong= OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*追踪止损点数,OrderTakeProfit(),0,CLR_NONE);
if (chenggong)Print("单号:"+OrderTicket()+"移动止损成功");
}}}
}
}
}
}
麻烦会的帮我改改,谢谢。
以下是EA
#property copyright "三步曲之一"
#property link "三步曲之一"
/*
*/
extern int 魔术号=8881;
enum 做单方向
{
多空都开=0, 开多=1,开空=2,
};
extern 做单方向 开仓方向=0;
extern int 建仓时段=30;
extern int 建仓MACD快EMA=34;
extern int 建仓MACD慢EMA=55;
extern int 建仓MACDSMA=13;
extern int 趋势时段=240;
extern int 趋势时段短均线=5;
extern int 趋势时段长均线=34;
extern int 趋势MACD快EMA=34;
extern int 趋势MACD慢EMA=55;
extern int 趋势MACDSMA=13;
extern double 止损点数=500;
extern double 止盈点数=9900;
extern double 当获利X点时就平仓一半=300;
extern double 滑点=50;
extern double 下单量=0.1;
extern bool 是否启用追踪止损=true;
extern double 追踪止损点数=750;
string 注释="三步曲之一";
int sj;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int Ticket = -1;
if(开多()&&sj!=iTime(NULL,建仓时段,0)&&(开仓方向==0||开仓方向==1)&&IsNewTFbar30())
{ Ticket=OrderSend(Symbol(),OP_BUY,下单量,Ask,滑点,Ask-止损点数*Point,Ask+止盈点数*Point,注释,魔术号,0,Red);
}
if(开空()&&sj!=iTime(NULL,建仓时段,0)&&(开仓方向==0||开仓方向==2)&&IsNewTFbar30())
{ Ticket=OrderSend(Symbol(),OP_SELL,下单量,Bid,滑点,Bid+止损点数*Point,Bid-止盈点数*Point,注释,魔术号,0,Blue);
}
if(是否启用追踪止损)移动止损();
//----
return(0);
}
//+------------------------------------------------------------------+
bool IsNewTFbar30()
{
static datetime t=0;
if(t!=iTime(NULL,30,0))
{
t=iTime(NULL,30,0);
return(true);
}
return (false);
}
bool 开多()
{
double H4JX51=iMA(NULL,趋势时段,趋势时段短均线,0,MODE_SMMA,PRICE_CLOSE,1);
double H4JX191=iMA(NULL,趋势时段,趋势时段长均线,0,MODE_SMMA,PRICE_CLOSE,1);
double Mzhu1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double Mzhu2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double Mxian1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double Mxian2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
double H4Mzhu1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double H4Mzhu2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double H4Mxian1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double H4Mxian2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
if( H4JX51>H4JX191&& Mzhu1>Mxian1&&Mzhu2
else return(false);
}
bool 开空()
{
double H4JX51=iMA(NULL,趋势时段,趋势时段短均线,0,MODE_SMMA,PRICE_CLOSE,1);
double H4JX191=iMA(NULL,趋势时段,趋势时段长均线,0,MODE_SMMA,PRICE_CLOSE,1);
double Mzhu1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double Mzhu2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double Mxian1=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double Mxian2=iMACD(NULL,建仓时段,建仓MACD快EMA,建仓MACD慢EMA,建仓MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
double H4Mzhu1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,1);
double H4Mzhu2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_MAIN,2);
double H4Mxian1=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,1);
double H4Mxian2=iMACD(NULL,趋势时段,趋势MACD快EMA,趋势MACD慢EMA,趋势MACDSMA,PRICE_CLOSE,MODE_SIGNAL,2);
if( H4JX51
else return(false);}
int 持仓单数量()
{ int k=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==魔术号)
{k++;}
}
} return(k);
}
void 平买仓()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symbol()&&OrderType()==OP_BUY&&OrderMagicNumber()==魔术号){
bool result = false;
result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 30, Red );
if(result) Print(Symbol()+"平多单成功!!");
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
}
}}}
}
void 平卖仓()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symbol()&&OrderType()==OP_SELL&&OrderMagicNumber()==魔术号){
bool result = false;
result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 30, Red );
if(result) Print(Symbol()+"平空单成功!!");
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
}
}}}
}
void 移动止损()
{
for (int cnt=0;cnt
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==魔术号)
{
if (OrderType()==OP_BUY)
{
if(Bid>=OrderOpenPrice())
{
if (Bid-OrderStopLoss()>Point*追踪止损点数||OrderStopLoss()==0)
{
bool chenggong= OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*追踪止损点数,OrderTakeProfit(),0,CLR_NONE);
if (chenggong)Print("单号:"+OrderTicket()+"移动止损成功");
}}
}
if (OrderType()==OP_SELL)
{
if(Ask<=OrderOpenPrice())
{
if (OrderStopLoss()-Ask>Point*追踪止损点数||OrderStopLoss()==0){
chenggong= OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*追踪止损点数,OrderTakeProfit(),0,CLR_NONE);
if (chenggong)Print("单号:"+OrderTicket()+"移动止损成功");
}}}
}
}
}
}
2楼
?????人呢
发表于:2018-05-30 06:15只看该作者
3楼
去网上找,这里99%不会编程
韬客社区www.talkfx.co
发表于:2018-05-30 07:03只看该作者
4楼
void 平仓一半()
{
for (int i=0;i=当获利X点时就平仓一半 && OrderMagicNumber()==魔术号 && StringFind(OrderComment(),"from")==-1)
{
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots()/2,Bid,滑点);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots()/2,Ask,滑点);
}
}
}
}
发表于:2018-05-30 07:05只看该作者
5楼
void 平仓一半()
{
for (int i=0;i=当获利X点时就平仓一半 && OrderMagicNumber()==魔术号 && StringFind(OrderComment(),"from")==-1)
{
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots()/2,Bid,滑点);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots()/2,Ask,滑点);
}
}
}
}
点评
发表于 2018-05-30 08:11
发表于:2018-05-30 07:20只看该作者
6楼
需要EA编程可以找我哦
韬客社区www.talkfx.co
8楼
胖的传说 发表于 2018-5-30 15:05
void 平仓一半() { for (int i=0;i=当获利X点时就平仓一半 && OrderMagicNumber()==魔术号 && ...
点评
发表于 2018-05-30 08:20
韬客社区www.talkfx.co
10楼
胖的传说 发表于 2018-5-30 16:20
确定有调用函数吗?我测试过的
韬客社区www.talkfx.co
11楼
胖的传说 发表于 2018-5-30 16:20
确定有调用函数吗?我测试过的
12楼
胖的传说 发表于 2018-5-30 16:20
确定有调用函数吗?我测试过的
点评
发表于 2018-05-31 04:40
发表于:2018-05-31 03:59只看该作者
13楼
居然可以用汉字做变量名
第一次见到太牛了
韬客社区www.talkfx.co
发表于:2018-05-31 04:13只看该作者
14楼
&& StringFind(OrderComment(),"from")==-1
这是干什么用的?
韬客社区www.talkfx.co
发表于:2018-05-31 04:25只看该作者
15楼
好像楼主使用的是 string 注释="三步曲之一"; 而答主使用的是"from"
大概把上面的“from”条件去掉就行了。楼主可以试一试。
也可以把 extern double 当获利X点时就平仓一半=300; 改成 extern double 当获利X点时就平仓一半=1;
设断点单步调试,看看是不是进入那个if条件内。
点评
发表于 2018-05-31 04:39
发表于:2018-05-31 04:36只看该作者
16楼
LBJ 发表于 2018-5-31 07:58
你看看是不是这样子加法的?
点评
发表于 2018-05-31 05:43
不要迷恋哥,哥也是天天割!
发表于:2018-05-31 04:39只看该作者
17楼
AlwaysRemember 发表于 2018-5-31 12:25
好像楼主使用的是 string 注释="三步曲之一"; 而答主使用的是"from" 大概把上面的“from”条件去掉就行 ...
发表于:2018-05-31 04:40只看该作者
18楼
LBJ 发表于 2018-5-31 07:58
你看看是不是这样子加法的?
不要迷恋哥,哥也是天天割!
发表于:2018-05-31 04:43只看该作者
19楼
胖的传说 发表于 2018-5-31 12:39
减仓之后注释也会自动修改,因为你减半仓盈利点数是不变的,也就是条件持续满足,这会造成一个死循环一直 ...
韬客社区www.talkfx.co
20楼
胖的传说 发表于 2018-5-31 12:36
不好意思,有个地方写错了,你换成这个就可以了:
点评
发表于 2018-05-31 05:45
韬客社区www.talkfx.co
发表于:2018-05-31 05:45只看该作者
21楼
LBJ 发表于 2018-5-31 13:43
可以了,谢谢,你私信发个QQ号给我吧,我发个红包给你
不要迷恋哥,哥也是天天割!