论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
查看:289回复:19
LBJ
注册时间2015-10-21
[求助]请问EA里如何才能改成当获利300点时就平仓一半?
楼主发表于:2018-05-30 00:06只看该作者倒序浏览
1楼 电梯直达
电梯直达
请问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()+"移动止损成功");
}}}
}
}
}
}
TK29帖子1楼右侧xm竖版广告90-240
个性签名

韬客社区www.talkfx.co

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告
LBJ
注册时间2015-10-21
楼主发表于:2018-05-30 05:51只看该作者
2楼
?????人呢
个性签名

韬客社区www.talkfx.co

blackhole
注册时间2015-06-23
发表于:2018-05-30 06:15只看该作者
3楼
去网上找,这里99%不会编程
胖的传说
注册时间2013-01-10
发表于: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,滑点); } } } }
胖的传说
注册时间2013-01-10
发表于: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-03-26
LBJ
注册时间2015-10-21
楼主发表于:2018-05-30 08:11只看该作者
8楼
胖的传说 发表于 2018-5-30 15:05
void 平仓一半() { for (int i=0;i=当获利X点时就平仓一半 && OrderMagicNumber()==魔术号 && ...
谢谢,但并没有起到平仓一半的作用……

点评

确定有调用函数吗?我测试过的发表于 2018-05-30 08:20
胖的传说
注册时间2013-01-10
发表于:2018-05-30 08:20只看该作者
9楼
LBJ 发表于 2018-5-30 16:11
谢谢,但并没有起到平仓一半的作用……
确定有调用函数吗?我测试过的emoji-image
LBJ
注册时间2015-10-21
楼主发表于:2018-05-30 09:19只看该作者
10楼
胖的传说 发表于 2018-5-30 16:20
确定有调用函数吗?我测试过的
#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 当获利X点时就平仓一半=350; extern bool 是否启用平仓一半=true; extern double 止损点数=500; extern double 止盈点数=9900; 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(是否启用追踪止损)移动止损(); 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=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=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()+"移动止损成功"); }}} } } } } 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,滑点); } } } }
LBJ
注册时间2015-10-21
楼主发表于:2018-05-30 09:25只看该作者
11楼
胖的传说 发表于 2018-5-30 16:20
确定有调用函数吗?我测试过的
你看看是不是这样子加法的? #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 当获利X点时就平仓一半=350; extern bool 是否启用平仓一半=true; extern double 止损点数=500; extern double 止盈点数=9900; extern double 滑点=50; extern double 下单量=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(是否启用追踪止损)移动止损(); 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=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=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()+"移动止损成功"); }}} } } } } 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,滑点); } } } }
LBJ
注册时间2015-10-21
楼主发表于:2018-05-30 23:58只看该作者
12楼
胖的传说 发表于 2018-5-30 16:20
确定有调用函数吗?我测试过的
你看看是不是这样子加法的? #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 当获利X点时就平仓一半=350; extern bool 是否启用平仓一半=true; extern double 止损点数=500; extern double 止盈点数=9900; 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(是否启用追踪止损)移动止损(); 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=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=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()+"移动止损成功"); }}} } } } } 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-31 04:40
AlwaysRemember
注册时间2018-03-05
发表于:2018-05-31 03:59只看该作者
13楼
居然可以用汉字做变量名 第一次见到太牛了
AlwaysRemember
注册时间2018-03-05
发表于:2018-05-31 04:13只看该作者
14楼
&& StringFind(OrderComment(),"from")==-1 这是干什么用的?
AlwaysRemember
注册时间2018-03-05
发表于:2018-05-31 04:25只看该作者
15楼
好像楼主使用的是 string 注释="三步曲之一"; 而答主使用的是"from" 大概把上面的“from”条件去掉就行了。楼主可以试一试。 也可以把 extern double 当获利X点时就平仓一半=300; 改成 extern double 当获利X点时就平仓一半=1; 设断点单步调试,看看是不是进入那个if条件内。

点评

减仓之后注释也会自动修改,因为你减半仓盈利点数是不变的,也就是条件持续满足,这会造成一个死循环一直在持续减半仓,他订单原本的注释是什么并不影响,我是盈利点数那里写错了发表于 2018-05-31 04:39
胖的传说
注册时间2013-01-10
发表于:2018-05-31 04:36只看该作者
16楼
LBJ 发表于 2018-5-31 07:58
你看看是不是这样子加法的?
不好意思,有个地方写错了,你换成这个就可以了: void 平仓一半() { for (int i=0;i=当获利X点时就平仓一半 && StringFind(OrderComment(),"from")==-1 && OrderMagicNumber()==魔术号) OrderClose(OrderTicket(),OrderLots()/2,Bid,滑点); } if(OrderType()==OP_SELL) { 盈利点数=MathRound((OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT)); if(盈利点数>=当获利X点时就平仓一半 && StringFind(OrderComment(),"from")==-1 && OrderMagicNumber()==魔术号) OrderClose(OrderTicket(),OrderLots()/2,Ask,滑点); } } } }

点评

可以了,谢谢,你私信发个QQ号给我吧,我发个红包给你发表于 2018-05-31 05:43
胖的传说
注册时间2013-01-10
发表于:2018-05-31 04:39只看该作者
17楼
AlwaysRemember 发表于 2018-5-31 12:25
好像楼主使用的是 string 注释="三步曲之一"; 而答主使用的是"from" 大概把上面的“from”条件去掉就行 ...
减仓之后注释也会自动修改,因为你减半仓盈利点数是不变的,也就是条件持续满足,这会造成一个死循环一直在持续减半仓,他订单原本的注释是什么并不影响,我是盈利点数那里写错了
胖的传说
注册时间2013-01-10
发表于:2018-05-31 04:40只看该作者
18楼
LBJ 发表于 2018-5-31 07:58
你看看是不是这样子加法的?
改好的在审核,不好意思emoji-image
AlwaysRemember
注册时间2018-03-05
发表于:2018-05-31 04:43只看该作者
19楼
胖的传说 发表于 2018-5-31 12:39
减仓之后注释也会自动修改,因为你减半仓盈利点数是不变的,也就是条件持续满足,这会造成一个死循环一直 ...
哦,对的,我没仔细看 ==-1
LBJ
注册时间2015-10-21
楼主发表于:2018-05-31 05:43只看该作者
20楼
胖的传说 发表于 2018-5-31 12:36
不好意思,有个地方写错了,你换成这个就可以了:
可以了,谢谢,你私信发个QQ号给我吧,我发个红包给你

点评

诶,使不得,互相帮助嘛发表于 2018-05-31 05:45
胖的传说
注册时间2013-01-10
发表于:2018-05-31 05:45只看该作者
21楼
LBJ 发表于 2018-5-31 13:43
可以了,谢谢,你私信发个QQ号给我吧,我发个红包给你
诶,使不得,互相帮助嘛

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]