myeatrade

社区

代码有问题,编译不通过

lvxuewu lvxuewu 2013-01-30 14:09
版主你好!我没做什么改动,再下载的就编译不通过,我不懂语言,只发现“,”的问题,还有其它的问题,帮忙看看。
代码: 全选
void runModel1(){
int totalPosition = countPositionByMagicSymbol(7341,M7341_Symbol,Model1_HardCloseTime);
modelMartingale1(M7341_Symbol,7341,5,7,0,1,7,0,,Model1_LotDigits,Model1_ECN,M7341_Point,M7341_Mt,Model1_Slippage); if( Model1_MaxSpread>0 && (MarketInfo(M7341_Symbol,MODE_ASK)-MarketInfo(M7341_Symbol,MODE_BID))>Model1_MaxSpread*M7341_Point )return;
if((Model1_CalculateModel!=0)&&(!isNewBar(M7341_Symbol,Model1_CalculateModelTimeframe,1))) return;
bool canRunCheck=false;
if(!Model1_MultiOrder)Model1_MaxOrder=1;
if(totalPosition<Model1_MaxOrder)canRunCheck=true;
if(Model1_MaxOrder>1&&totalPosition>=1){
if(TimeCurrent()<(Model1_lastOpenOrderTime+Model1_MultiOrderTimeInterval*60))canRunCheck=false;
}
if(Model1_BreakEven>0&&totalPosition>0)breakEven(7341,M7341_Symbol,Model1_BreakEven,M7341_Point);
if(Model1_TrailMode>0&&Model1_TrailMode<=2&&totalPosition>0)trailStop(7341,M7341_Symbol,Model1_TrailMode,Model1_TrailStart,Model1_TrailStop,M7341_Point);
if(canRunCheck){
if(checkM1G1()){
int orderType=OP_BUY;if(Model1_ReverseOrder)orderType=OP_SELL;
if(Model1_AutoTrade){
double lots = getlots(Model1_DefaultLots,Model1_MoneyManagement,Model1_Risk,Model1_StopLoss,M7341_Symbol,M7341_Mt,Model1_LotDigits,Model1_MinLots,Model1_MaxLots);
int sl= Model1_StopLoss;
int tp = Model1_TakeProfit;
int ticket = openposition(
M7341_Symbol,
orderType,
lots,
sl,
tp,
7341,
Model1_ECN,
Model1_InstantOrder,
Model1_StopOrder,
Model1_LimitOrder,
Model1_PendingGap,
Model1_PendingExpiration,
M7341_Point,
M7341_Mt,
Model1_Slippage);
Model1_lastOpenOrderTime = getOrderOpenTime(ticket);}
}
}
}


myeatrade myeatrade 2013-01-30 16:00
你好,请上传完整代码,只是代码片段,肯定是编译不了的
lvxuewu lvxuewu 2013-02-05 14:45
全部代码,好像是加仓部分的代码问题。
代码: 全选

//+------------------------------------------------------------------+
// Copyright , myEAtrade
// http://www.myEAtrade.com
// System Name: SCALPER-SUMUP0.00-FT
// Automatically generated by the myEAtrade.com
// at Tuesday 05th of February 2013 06:43:41 AM
//+------------------------------------------------------------------+
#property copyright "myEAtrade , www.myeatrade.com"
#property link "http://www.myeatrade.com/"




///////////////////////////Model1////////////////////////////
extern string Model1_tip="BUY";
bool Model1_AutoTrade=1;
extern int Model1_CalculateModel=0;
extern int Model1_CalculateModelTimeframe=5;
extern double Model1_DefaultLots=0.1;
extern bool Model1_MoneyManagement=0;
extern double Model1_Risk=2;
extern int Model1_LotDigits=1;
extern double Model1_MinLots=0.1;
extern double Model1_MaxLots=100;
extern int Model1_StopLoss=0;
extern int Model1_TakeProfit=4;
extern int Model1_BreakEven=0;
extern int Model1_TrailMode=0;
extern int Model1_TrailStart=50;
extern int Model1_TrailStop=20;
extern int Model1_MaxSpread=0;
extern int Model1_Slippage=0;
extern bool Model1_ECN=1;
extern bool Model1_MultiOrder=0;
extern int Model1_MaxOrder=5;
extern int Model1_MultiOrderTimeInterval=5;
extern bool Model1_InstantOrder=1;
extern bool Model1_StopOrder=0;
extern bool Model1_LimitOrder=0;
extern int Model1_PendingGap=20;
extern int Model1_PendingExpiration=720;
extern int Model1_HardCloseTime=0;
extern bool Model1_ReverseOrder=0;
string M7452_Symbol;double M7452_Point;int M7452_Mt;datetime Model1_lastOpenOrderTime;
extern string M1G1_tip="Condition Group1";
extern string M1G1_FilterOpt12_tip="Filter Conditions";
extern string M1G1_FilterOpt34_tip="Filter Conditions";
extern string M1G1_Exe_tip="Execution Conditions";
extern string M1G1_ExeCon1_tip="Execution Condition 1";
string m1g1c1_Exec_Opt12_APara1="NULL"; // Symbol
extern int m1g1c1_Exec_Opt12_APara2=1; // Timeframe
string m1g1c1_Exec_Opt12_BPara1="NULL"; // Symbol
extern int m1g1c1_Exec_Opt12_BPara2=1; // Timeframe
extern int m1g1c1_Exec_Opt12_BPara3=2; // Mode
extern int m1g1c1_Exec_Opt12_BPara4=100; // Period
extern int m1g1c1_Exec_Opt12_BPara5=0; // MA method
extern int m1g1c1_Exec_Opt12_BPara6=0; // Shift
extern int m1g1c1_Exec_Opt12_BPara7=5; // Apply to
extern double m1g1c1_Exec_Opt12_BPara8=0.04; // Deviation
extern string M1G1_Shift_tip="Shift Conditions";

///////////////////////////Model2////////////////////////////
extern string Model2_tip="SELL";
bool Model2_AutoTrade=1;
extern int Model2_CalculateModel=0;
extern int Model2_CalculateModelTimeframe=5;
extern double Model2_DefaultLots=0.1;
extern bool Model2_MoneyManagement=0;
extern double Model2_Risk=2;
extern int Model2_LotDigits=1;
extern double Model2_MinLots=0.1;
extern double Model2_MaxLots=100;
extern int Model2_StopLoss=0;
extern int Model2_TakeProfit=4;
extern int Model2_BreakEven=0;
extern int Model2_TrailMode=0;
extern int Model2_TrailStart=50;
extern int Model2_TrailStop=20;
extern int Model2_MaxSpread=0;
extern int Model2_Slippage=0;
extern bool Model2_ECN=1;
extern bool Model2_MultiOrder=0;
extern int Model2_MaxOrder=5;
extern int Model2_MultiOrderTimeInterval=5;
extern bool Model2_InstantOrder=1;
extern bool Model2_StopOrder=0;
extern bool Model2_LimitOrder=0;
extern int Model2_PendingGap=20;
extern int Model2_PendingExpiration=720;
extern int Model2_HardCloseTime=0;
extern bool Model2_ReverseOrder=0;
string M7453_Symbol;double M7453_Point;int M7453_Mt;datetime Model2_lastOpenOrderTime;
extern string M2G1_tip="Condition Group1";
extern string M2G1_FilterOpt12_tip="Filter Conditions";
extern string M2G1_FilterOpt34_tip="Filter Conditions";
extern string M2G1_Exe_tip="Execution Conditions";
extern string M2G1_ExeCon1_tip="Execution Condition 1";
string m2g1c1_Exec_Opt12_APara1="NULL"; // Symbol
extern int m2g1c1_Exec_Opt12_APara2=1; // Timeframe
string m2g1c1_Exec_Opt12_BPara1="NULL"; // Symbol
extern int m2g1c1_Exec_Opt12_BPara2=1; // Timeframe
extern int m2g1c1_Exec_Opt12_BPara3=1; // Mode
extern int m2g1c1_Exec_Opt12_BPara4=100; // Period
extern int m2g1c1_Exec_Opt12_BPara5=0; // MA method
extern int m2g1c1_Exec_Opt12_BPara6=0; // Shift
extern int m2g1c1_Exec_Opt12_BPara7=5; // Apply to
extern double m2g1c1_Exec_Opt12_BPara8=0.04; // Deviation
extern string M2G1_Shift_tip="Shift Conditions";
double m1g1c1_Exec_Opt12_A_val[3];double m1g1c1_Exec_Opt12_B_val[3];double m2g1c1_Exec_Opt12_A_val[3];double m2g1c1_Exec_Opt12_B_val[3];
datetime lastBarTime[3];
int modelMagic[3];


int maxtry=10;
bool printLog=true;
int sleepTime=2000;

int init(){
M7452_Symbol=Symbol(); double m1_point = MarketInfo(M7452_Symbol,MODE_POINT); int m1_digits = MarketInfo(M7452_Symbol,MODE_DIGITS); if(m1_digits==3 || m1_digits==5){
M7452_Point=m1_point*10;
M7452_Mt=10;
}else{
M7452_Point=m1_point;
M7452_Mt=1;
}
modelMagic[1]=7452;
M7453_Symbol=Symbol(); double m2_point = MarketInfo(M7453_Symbol,MODE_POINT); int m2_digits = MarketInfo(M7453_Symbol,MODE_DIGITS); if(m2_digits==3 || m2_digits==5){
M7453_Point=m2_point*10;
M7453_Mt=10;
}else{
M7453_Point=m2_point;
M7453_Mt=1;
}
modelMagic[2]=7453;
m1g1c1_Exec_Opt12_APara1=Symbol();m1g1c1_Exec_Opt12_BPara1=Symbol();m2g1c1_Exec_Opt12_APara1=Symbol();m2g1c1_Exec_Opt12_BPara1=Symbol();
}

int start(){
runModel1();runModel2();
return (0);
}


void runModel1(){
int totalPosition = countPositionByMagicSymbol(7452,M7452_Symbol,Model1_HardCloseTime);
modelMartingale1(M7452_Symbol,7452,5,7,0,1,7,0,,Model1_LotDigits,Model1_ECN,M7452_Point,M7452_Mt,Model1_Slippage); int startHour[3],startMinute[3],endHour[3],endMinute[3];
startHour[0]=3+2; startMinute[0]=0+2; endHour[0]=6+2; endMinute[0]=0+2;
startHour[0]=10+2; startMinute[0]=0+2; endHour[0]=12+2; endMinute[0]=0+2;
startHour[0]=18+2; startMinute[0]=0+2; endHour[0]=22+2; endMinute[0]=0+2;
bool tradetime=false;
for(int i=0;i<3;i++){if(isTradeTime(startHour,startMinute,endHour,endMinute)){tradetime=true;break;}} if(!tradetime)return;
if( Model1_MaxSpread>0 && (MarketInfo(M7452_Symbol,MODE_ASK)-MarketInfo(M7452_Symbol,MODE_BID))>Model1_MaxSpread*M7452_Point )return;
if((Model1_CalculateModel!=0)&&(!isNewBar(M7452_Symbol,Model1_CalculateModelTimeframe,1))) return;
bool canRunCheck=false;
if(!Model1_MultiOrder)Model1_MaxOrder=1;
if(totalPosition<Model1_MaxOrder)canRunCheck=true;
if(Model1_MaxOrder>1&&totalPosition>=1){
if(TimeCurrent()<(Model1_lastOpenOrderTime+Model1_MultiOrderTimeInterval*60))canRunCheck=false;
}
if(Model1_BreakEven>0&&totalPosition>0)breakEven(7452,M7452_Symbol,Model1_BreakEven,M7452_Point);
if(Model1_TrailMode>0&&Model1_TrailMode<=2&&totalPosition>0)trailStop(7452,M7452_Symbol,Model1_TrailMode,Model1_TrailStart,Model1_TrailStop,M7452_Point);
if(canRunCheck){
if(checkM1G1()){
int orderType=OP_BUY;if(Model1_ReverseOrder)orderType=OP_SELL;
if(Model1_AutoTrade){
double lots = getlots(Model1_DefaultLots,Model1_MoneyManagement,Model1_Risk,Model1_StopLoss,M7452_Symbol,M7452_Mt,Model1_LotDigits,Model1_MinLots,Model1_MaxLots);
int sl= Model1_StopLoss;
int tp = Model1_TakeProfit;
int ticket = openposition(
M7452_Symbol,
orderType,
lots,
sl,
tp,
7452,
Model1_ECN,
Model1_InstantOrder,
Model1_StopOrder,
Model1_LimitOrder,
Model1_PendingGap,
Model1_PendingExpiration,
M7452_Point,
M7452_Mt,
Model1_Slippage);
Model1_lastOpenOrderTime = getOrderOpenTime(ticket);}
}
}
}
void runModel2(){
int totalPosition = countPositionByMagicSymbol(7453,M7453_Symbol,Model2_HardCloseTime);
modelMartingale1(M7453_Symbol,7453,5,7,0,1,7,0,,Model2_LotDigits,Model2_ECN,M7453_Point,M7453_Mt,Model2_Slippage); int startHour[3],startMinute[3],endHour[3],endMinute[3];
startHour[0]=3+2; startMinute[0]=0+2; endHour[0]=6+2; endMinute[0]=0+2;
startHour[0]=10+2; startMinute[0]=0+2; endHour[0]=12+2; endMinute[0]=0+2;
startHour[0]=18+2; startMinute[0]=0+2; endHour[0]=22+2; endMinute[0]=0+2;
bool tradetime=false;
for(int i=0;i<3;i++){if(isTradeTime(startHour,startMinute,endHour,endMinute)){tradetime=true;break;}} if(!tradetime)return;
if( Model2_MaxSpread>0 && (MarketInfo(M7453_Symbol,MODE_ASK)-MarketInfo(M7453_Symbol,MODE_BID))>Model2_MaxSpread*M7453_Point )return;
if((Model2_CalculateModel!=0)&&(!isNewBar(M7453_Symbol,Model2_CalculateModelTimeframe,2))) return;
bool canRunCheck=false;
if(!Model2_MultiOrder)Model2_MaxOrder=1;
if(totalPosition<Model2_MaxOrder)canRunCheck=true;
if(Model2_MaxOrder>1&&totalPosition>=1){
if(TimeCurrent()<(Model2_lastOpenOrderTime+Model2_MultiOrderTimeInterval*60))canRunCheck=false;
}
if(Model2_BreakEven>0&&totalPosition>0)breakEven(7453,M7453_Symbol,Model2_BreakEven,M7453_Point);
if(Model2_TrailMode>0&&Model2_TrailMode<=2&&totalPosition>0)trailStop(7453,M7453_Symbol,Model2_TrailMode,Model2_TrailStart,Model2_TrailStop,M7453_Point);
if(canRunCheck){
if(checkM2G1()){
int orderType=OP_SELL;if(Model2_ReverseOrder)orderType=OP_BUY;
if(Model2_AutoTrade){
double lots = getlots(Model2_DefaultLots,Model2_MoneyManagement,Model2_Risk,Model2_StopLoss,M7453_Symbol,M7453_Mt,Model2_LotDigits,Model2_MinLots,Model2_MaxLots);
int sl= Model2_StopLoss;
int tp = Model2_TakeProfit;
int ticket = openposition(
M7453_Symbol,
orderType,
lots,
sl,
tp,
7453,
Model2_ECN,
Model2_InstantOrder,
Model2_StopOrder,
Model2_LimitOrder,
Model2_PendingGap,
Model2_PendingExpiration,
M7453_Point,
M7453_Mt,
Model2_Slippage);
Model2_lastOpenOrderTime = getOrderOpenTime(ticket);}
}
}
}
bool checkM1G1(){
int i;
bool reValue=false;
int preBar=0;
if(Model1_CalculateModel==2)preBar=1;

bool filter12=true;
bool filter34=true;
bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false;
if(exec12_b){
exec12_temp=true;
int e12cBar111=2; if(preBar==1&&e12cBar111==1)e12cBar111=2;
for(i=preBar;i<=e12cBar111;i++){
m1g1c1_Exec_Opt12_A_val=iLow(m1g1c1_Exec_Opt12_APara1,
m1g1c1_Exec_Opt12_APara2,
i);
m1g1c1_Exec_Opt12_B_val=iEnvelopes(m1g1c1_Exec_Opt12_BPara1,
m1g1c1_Exec_Opt12_BPara2,
m1g1c1_Exec_Opt12_BPara4,
m1g1c1_Exec_Opt12_BPara5,
m1g1c1_Exec_Opt12_BPara6,
m1g1c1_Exec_Opt12_BPara7,
m1g1c1_Exec_Opt12_BPara8,
m1g1c1_Exec_Opt12_BPara3,
i);
}
if(!(m1g1c1_Exec_Opt12_A_val[preBar]<(m1g1c1_Exec_Opt12_B_val[preBar]-0))){exec12_temp=false;}
if(exec12_temp){
for(i=preBar+1;i<e12cBar111;i++){
if(!(m1g1c1_Exec_Opt12_A_val<m1g1c1_Exec_Opt12_B_val)){exec12_temp=false;}
}
}
if(!exec12_temp)exec12_b=false;
if(exec12_temp){
if(m1g1c1_Exec_Opt12_A_val[e12cBar111]<m1g1c1_Exec_Opt12_B_val[e12cBar111]){exec12_temp=false;}
}
if(exec12_temp)exec12_a=true;
}
if(exec12_a&&exec12_b)exec12=true;
bool bshift=true;
if(filter12&&filter34&&exec12&&bshift)reValue=true;
return (reValue);
}
bool checkM2G1(){
int i;
bool reValue=false;
int preBar=0;
if(Model2_CalculateModel==2)preBar=1;

bool filter12=true;
bool filter34=true;
bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false;
if(exec12_b){
exec12_temp=true;
int e12cBar211=2; if(preBar==1&&e12cBar211==1)e12cBar211=2;
for(i=preBar;i<=e12cBar211;i++){
m2g1c1_Exec_Opt12_A_val=iHigh(m2g1c1_Exec_Opt12_APara1,
m2g1c1_Exec_Opt12_APara2,
i);
m2g1c1_Exec_Opt12_B_val=iEnvelopes(m2g1c1_Exec_Opt12_BPara1,
m2g1c1_Exec_Opt12_BPara2,
m2g1c1_Exec_Opt12_BPara4,
m2g1c1_Exec_Opt12_BPara5,
m2g1c1_Exec_Opt12_BPara6,
m2g1c1_Exec_Opt12_BPara7,
m2g1c1_Exec_Opt12_BPara8,
m2g1c1_Exec_Opt12_BPara3,
i);
}
if(!(m2g1c1_Exec_Opt12_A_val[preBar]>(m2g1c1_Exec_Opt12_B_val[preBar]+0))){exec12_temp=false;}
if(exec12_temp){
for(i=preBar+1;i<e12cBar211;i++){
if(!(m2g1c1_Exec_Opt12_A_val>m2g1c1_Exec_Opt12_B_val)){exec12_temp=false;}
}
}
if(!exec12_temp)exec12_b=false;
if(exec12_temp){
if(m2g1c1_Exec_Opt12_A_val[e12cBar211]>m2g1c1_Exec_Opt12_B_val[e12cBar211]){exec12_temp=false;}
}
if(exec12_temp)exec12_a=true;
}
if(exec12_a&&exec12_b)exec12=true;
bool bshift=true;
if(filter12&&filter34&&exec12&&bshift)reValue=true;
return (reValue);
}


bool isNewBar(string s,int timeframe,int model){
datetime currentBarTime = iTime(s,timeframe,0);
if(lastBarTime[model]!=currentBarTime){
lastBarTime[model] = currentBarTime;
return (true);
}else{
return (false);
}
}


double getlots(double DefaultLots,bool MoneyManage,double Risk,double StopLoss,string symbol,int mt,int LotDigits,double MinLots,double MaxLots){
double lot;
if(MoneyManage){
if(StopLoss>0)lot=NormalizeDouble((AccountEquity()*(Risk/100))/(MarketInfo(symbol,MODE_TICKVALUE)*mt*StopLoss ),LotDigits);
else lot= NormalizeDouble(AccountEquity()/10000,LotDigits);
if(lot<MinLots)lot=MinLots;
if(lot>MaxLots)lot=MaxLots;
}else lot=DefaultLots;
return(lot);
}


int openposition(string symbol,int type,double lots,double StopLoss,double TakeProfit,int magic,bool ECN,bool InstantOrder,bool StopOrder,bool LimitOrder,int Gap,int Expiration,double point,int mt,int Slippage){
int ticket=0;int expire=0;int try=0;
if(StopOrder || LimitOrder)if(Expiration>0)expire=TimeCurrent()+(Expiration*60);
double ask=MarketInfo(symbol,MODE_ASK);double bid=MarketInfo(symbol,MODE_BID);
if(type==OP_BUY){//buy
if(ECN){
if(InstantOrder){
while(ticket<=0 && try<maxtry){
RefreshRates();
ticket=open(symbol,OP_BUY,lots,ask,0,0,magic,expire,point,mt,Slippage,Blue);
if(ticket<0){try++;if(printLog)Print("Error opening Instant BUY order!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
if(ticket>0){ecnsltpLong(ticket,StopLoss,TakeProfit,point);}
}
}
if(StopOrder){
RefreshRates();
ticket=open(symbol,OP_BUYSTOP,lots,ask+Gap*point,0,0,magic,expire,point,mt,Slippage,Blue);
if(ticket>0){ecnsltpLong(ticket,StopLoss,TakeProfit,point);}
}
if(LimitOrder){
RefreshRates();
ticket=open(symbol,OP_BUYLIMIT,lots,bid-Gap*point,0,0,magic,expire,point,mt,Slippage,Blue);
if(ticket>0){ecnsltpLong(ticket,StopLoss,TakeProfit,point);}
}
}else{
if(InstantOrder){
while(ticket<=0 && try<maxtry){
RefreshRates();
ticket=open(symbol,OP_BUY,lots,ask,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Blue);
if(ticket<0){try++;if(printLog)Print("Error opening Instant BUY order!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
if(StopOrder){RefreshRates();ticket=open(symbol,OP_BUYSTOP,lots,ask+Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Blue);}
if(LimitOrder){RefreshRates();ticket=open(symbol,OP_BUYLIMIT,lots,bid-Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Blue);}
}
}else if(type==OP_SELL){ // Sell
if(ECN){
if(InstantOrder){
while(ticket<=0 && try<maxtry){
RefreshRates();
ticket=open(symbol,OP_SELL,lots,bid,0,0,magic,expire,point,mt,Slippage,Red);
if(ticket<0){try++;if(printLog)Print("Error opening Instant SELL order!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
if(ticket>0){ecnsltpShort(ticket,StopLoss,TakeProfit,point);}
}
}
if(StopOrder){
RefreshRates();
ticket=open(symbol,OP_SELLSTOP,lots,bid-Gap*point,0,0,magic,expire,point,mt,Slippage,Red);
if(ticket>0){ecnsltpShort(ticket,StopLoss,TakeProfit,point);}
}
if(LimitOrder){
RefreshRates();
ticket=open(symbol,OP_SELLLIMIT,lots,ask+Gap*point,0,0,magic,expire,point,mt,Slippage,Red);
if(ticket>0){ecnsltpShort(ticket,StopLoss,TakeProfit,point);}
}
}else{
if(InstantOrder){
while(ticket<=0 && try<maxtry){
RefreshRates();
ticket=open(symbol,OP_SELL,lots,bid,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Red);
if(ticket<0){try++;if(printLog)Print("Error opening Instant SELL order!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
if(StopOrder){RefreshRates();ticket=open(symbol,OP_SELLSTOP,lots,bid-Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Red);}
if(LimitOrder){RefreshRates();ticket=open(symbol,OP_SELLLIMIT,lots,ask+Gap*point,StopLoss,TakeProfit,magic,expire,point,mt,Slippage,Red);}
}
}

return (ticket);
}


int open(string symbol,int type,double lots,double price,double stoploss,double takeprofit,int magic, int expire,double point,int mt,int Slippage,color clr){
int ticket=0;
double sl,tp;
if(type==OP_BUY || type==OP_BUYSTOP || type==OP_BUYLIMIT){
if(stoploss>0){sl=price-stoploss*point;}else{sl=0;}
if(takeprofit>0){tp=price+takeprofit*point;}else{tp=0;}
}
if(type==OP_SELL || type==OP_SELLSTOP || type==OP_SELLLIMIT){
if(stoploss>0){sl=price+stoploss*point;}else{sl=0;}
if(takeprofit>0){tp=price-takeprofit*point;}else{tp=0;}
}
ticket=OrderSend(symbol,type,lots,NormalizeDouble(price,MarketInfo(symbol,MODE_DIGITS)),Slippage*mt,sl,tp,"Prower by myeatrade.com",magic,expire,clr);
return(ticket);
}

datetime getOrderOpenTime(int ticket){
OrderSelect(ticket,SELECT_BY_TICKET);
return (OrderOpenTime());
}



void ecnsltpLong(int ticket,double StopLoss,double TakeProfit,double point){
OrderSelect(ticket,SELECT_BY_TICKET);
bool succeed;int try;
succeed=false;try=0;
if(OrderStopLoss()==0&&StopLoss>0){
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-StopLoss*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0,Blue);
if(!succeed){try++;if(printLog)Print("Error modify long order stoploss!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
RefreshRates();
succeed=false;try=0;
OrderSelect(ticket,SELECT_BY_TICKET);
if(OrderTakeProfit()==0&&TakeProfit>0){
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()+TakeProfit*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),0,Blue);
if(!succeed){try++;if(printLog)Print("Error modify long order takeprofit!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
}

void ecnsltpShort(int ticket,double StopLoss,double TakeProfit,double point){
OrderSelect(ticket,SELECT_BY_TICKET);
bool succeed;int try;
succeed=false;try=0;
if(OrderStopLoss()==0&&StopLoss>0){
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+StopLoss*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),OrderTakeProfit(),0,Blue);
if(!succeed){try++;if(printLog)Print("Error modify short order stoploss!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
RefreshRates();
succeed=false;try=0;
OrderSelect(ticket,SELECT_BY_TICKET);
if(OrderTakeProfit()==0&&TakeProfit>0){
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()-TakeProfit*point,MarketInfo(OrderSymbol(),MODE_DIGITS)),0,Blue);
if(!succeed){try++;if(printLog)Print("Error modify short order takeprofit!",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
}


int countPositionByMagicSymbol(int magic,string symbol,int hardCloseTime){
int count=0;
if(OrdersTotal()>0){
for(int i=OrdersTotal();i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==magic&&OrderSymbol()==symbol){
count++;
if(hardCloseTime>0&&(TimeCurrent()>OrderOpenTime()+hardCloseTime*60)){
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),MarketInfo(symbol,MODE_BID),0);
else if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),MarketInfo(symbol,MODE_ASK),0);
}
}
}
return(count);
}
}



void breakEven(int magic,string symbol,int BreakEven,double point){
RefreshRates();
if(OrdersTotal()>0){
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL && OrderMagicNumber()==magic && OrderSymbol()==symbol){
if(OrderType()==OP_BUY){
if( NormalizeDouble((MarketInfo(symbol,MODE_BID)-OrderOpenPrice()),MarketInfo(symbol,MODE_DIGITS))>=NormalizeDouble(BreakEven*point,MarketInfo(symbol,MODE_DIGITS))){
if( (OrderStopLoss()-OrderOpenPrice())<0)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Blue);
}
}else{
if( NormalizeDouble((OrderOpenPrice()-MarketInfo(symbol,MODE_ASK)),MarketInfo(symbol,MODE_DIGITS))>=NormalizeDouble(BreakEven*point,MarketInfo(symbol,MODE_DIGITS))){
if(((OrderOpenPrice()-OrderStopLoss())<0)||(OrderStopLoss()==0))
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
}
}
}
}
}
}


void trailStop(int magic,string symbol,int TrailMode,int TrailStart,int TrailStop,double point){
RefreshRates();
if(OrdersTotal()>0){
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()<=OP_SELL && OrderMagicNumber()==magic && OrderSymbol()==symbol){
int digits=MarketInfo(symbol,MODE_DIGITS);
double ask = MarketInfo(symbol,MODE_ASK);double bid = MarketInfo(symbol,MODE_BID);
if(OrderType()==OP_BUY){
if( NormalizeDouble((bid-OrderOpenPrice()),digits)>=NormalizeDouble(TrailStart*point,digits)){
if(TrailMode==1){
if(NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(bid-TrailStop*point,digits)){
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(bid-TrailStop*point,digits),OrderTakeProfit(),0,Blue);
}
}
if(TrailMode==2){
if(bid-TrailStop*point >=OrderStopLoss()+TrailStop*point){
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(bid-TrailStop*point,digits),OrderTakeProfit(),0,Blue);
}
}
}
}else{
if( NormalizeDouble((OrderOpenPrice()-ask),digits)>=NormalizeDouble(TrailStart*point,digits)){
if(TrailMode==1){
if( (NormalizeDouble(OrderStopLoss(),digits) > NormalizeDouble(ask+TrailStop*point,digits)) || OrderStopLoss()==0 ){
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ask+TrailStop*point,digits),OrderTakeProfit(),0,Red);
}
}
if(TrailMode==2){
if((ask+TrailStop*point <=OrderStopLoss()-TrailStop*point) || OrderStopLoss()==0 ){
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ask+TrailStop*point,digits),OrderTakeProfit(),0,Blue);
}
}
}
}
}
}
}
}

bool isTradeTime(int startHour,int startMinute,int endHour,int endMinute){
if(startHour<=endHour){
if(Hour()>startHour && Hour()<endHour) return (true);
if(Hour()==startHour){
if(Minute()>=startMinute) return (true);
}
if(Hour()==endHour){
if(Minute()<endMinute)return(true);
}
}else{
if(!( Hour()<=startHour && Hour()>=endHour )) return (true);
if(Hour()==startHour){
if(Minute()>=startMinute) return (true);
}
if(Hour()==endHour){
if(Minute()<endMinute)return(true);
}
}
}

bool closeAllByMagic(int magic,int num){
int orderTotal=OrdersTotal();
bool succeed;int try;
for(int i=orderTotal-1;i>=0;i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==magic){
if(OrderType()==OP_BUY){
succeed=0;try=0;
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),0);
if(!succeed){try++;if(printLog)Print("Error close order ",""+OrderTicket(),"! ",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
if(OrderType()==OP_SELL){
succeed=0;try=0;
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),0);
if(!succeed){try++;if(printLog)Print("Error close order ",""+OrderTicket(),"! ",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
}
}
}

bool closeByTicket(int ticket){
bool succeed;int try;
OrderSelect(ticket,SELECT_BY_TICKET);
if(OrderType()==OP_BUY){
succeed=0;try=0;
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),0);
if(!succeed){try++;if(printLog)Print("Error close order ",""+OrderTicket(),"! ",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
if(OrderType()==OP_SELL){
succeed=0;try=0;
while(!succeed && try<maxtry){
RefreshRates();
succeed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),0);
if(!succeed){try++;if(printLog)Print("Error close order ",""+OrderTicket(),"! ",errordescription(GetLastError())," retry "+try+" times");Sleep(sleepTime);}
}
}
}



int unfinishMartingale1[100];
int unfinsihMartingale1Count=0;

void martingale1(string symbol,int ticket,int marSL,int marTP,int n,double multiple,int maxNum,int hardSL,bool reverse,int LotDigits,bool ECN,double point,int mt,int Slippage){
int martingaleMagic = ticket;int lastOpenTime=0;double lastLots=0;double lastOpenPrice=0;double lastCurrentPrice=0;int lastOrderType=0;double lastProfitPip=0;
bool hasMartingale=false;
int firstCloseTime=0;
int orderNum=0;
double orderLots[7];

OrderSelect(ticket,SELECT_BY_TICKET);
orderLots[orderNum] = OrderLots();
orderNum++;
firstCloseTime=OrderCloseTime();
lastLots=OrderLots();
lastOpenPrice = OrderOpenPrice();
lastCurrentPrice = OrderClosePrice();
lastOrderType= OrderType();
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==martingaleMagic && OrderSymbol()== symbol){
hasMartingale = true;

orderLots[orderNum] = OrderLots();
orderNum++;

if(OrderOpenTime()>lastOpenTime){
lastLots=OrderLots();
lastOpenPrice = OrderOpenPrice();
lastCurrentPrice = OrderClosePrice();
lastOrderType= OrderType();
}
}
}

if(firstCloseTime>0 && !hasMartingale){
del_unfinishMartingale1(martingaleMagic);
return (0);
}

if(orderNum==0)return (0);

if(lastOrderType==OP_BUY)lastProfitPip = (lastCurrentPrice - lastOpenPrice)/point;
if(lastOrderType==OP_SELL)lastProfitPip = (lastOpenPrice - lastCurrentPrice)/point;

if(reverse){
if(lastOrderType==OP_BUY)lastOrderType=OP_SELL;
else if(lastOrderType==OP_SELL)lastOrderType=OP_BUY;
}

if(lastProfitPip>=marTP && hasMartingale){
closeAllByMagic(martingaleMagic,orderNum);
closeByTicket(ticket);
del_unfinishMartingale1(martingaleMagic);
return (0);
}

if(hardSL>0&&orderNum==(maxNum+1)){
if(lastProfitPip<=(-1)*hardSL){
closeAllByMagic(martingaleMagic,orderNum);
closeByTicket(ticket);
del_unfinishMartingale1(martingaleMagic);
return (0);
}
}

if(orderNum>maxNum)return (0);

if(lastProfitPip<=(-1)*marSL){
double newLots = 0;
int begin=orderNum-n;
if(begin==orderNum)begin=0;
if(begin<0)begin=0;
for(i=begin;i<orderNum;i++){
newLots=newLots+orderLots;
}
newLots = NormalizeDouble(newLots * multiple,LotDigits);
openposition(symbol,lastOrderType,newLots,0,0,martingaleMagic,ECN,true,false,false,0,0,point,mt,Slippage);
}

}


void modelMartingale1(string symbol,int magic,int marSL,int marTP,int n,double multiple,int maxNum,int hardSL,bool reverse,int LotDigits,bool ECN,double point,int mt,int Slippage){
if(OrdersTotal()>0){
for(int i=0;i<OrdersTotal();i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==magic && OrderSymbol()==symbol){
push_unfinishMartingale1(OrderTicket());
}
}
}
for(i=0;i<unfinsihMartingale1Count;i++){
martingale1(symbol,unfinishMartingale1,marSL,marTP,n,multiple,maxNum,hardSL,reverse,LotDigits,ECN,point,mt,Slippage);
}
}

void push_unfinishMartingale1(int data){
bool canPush=true;
for(int i=0;i<unfinsihMartingale1Count;i++){if(unfinishMartingale1==data){canPush=false;break;}}
if(canPush){unfinishMartingale1[unfinsihMartingale1Count]=data;unfinsihMartingale1Count++;}
}

void del_unfinishMartingale1(int data){
bool canDel=false;
for(int i=0;i<unfinsihMartingale1Count;i++){if(unfinishMartingale1==data){canDel=true;break;}}
if(canDel){for(int j=i;j<=unfinsihMartingale1Count-1;j++){unfinishMartingale1[j] = unfinishMartingale1[j+1];}unfinsihMartingale1Count--;}
}








string errordescription(int code){
string error;
switch(code){
case 0:
case 1:error="no error";break;
case 2:error="common error";break;
case 3:error="invalid trade parameters";break;
case 4:error="trade server is busy";break;
case 5:error="old version of the client terminal";break;
case 6:error="no connection with trade server";break;
case 7:error="not enough rights";break;
case 8:error="too frequent requests";break;
case 9:error="malfunctional trade operation";break;
case 64:error="account disabled";break;
case 65:error="invalid account";break;
case 128:error="trade timeout";break;
case 129:error="invalid price";break;
case 130:error="invalid stops";break;
case 131:error="invalid trade volume";break;
case 132:error="market is closed";break;
case 133:error="trade is disabled";break;
case 134:error="not enough money";break;
case 135:error="price changed";break;
case 136:error="off quotes";break;
case 137:error="broker is busy";break;
case 138:error="requote";break;
case 139:error="order is locked";break;
case 140:error="long positions only allowed";break;
case 141:error="too many requests";break;
case 145:error="modification denied because order too close to market";break;
case 146:error="trade context is busy";break;
case 4000:error="no error";break;
case 4001:error="wrong function pointer";break;
case 4002:error="array index is out of range";break;
case 4003:error="no memory for function call stack";break;
case 4004:error="recursive stack overflow";break;
case 4005:error="not enough stack for parameter";break;
case 4006:error="no memory for parameter string";break;
case 4007:error="no memory for temp string";break;
case 4008:error="not initialized string";break;
case 4009:error="not initialized string in array";break;
case 4010:error="no memory for array\' string";break;
case 4011:error="too long string";break;
case 4012:error="remainder from zero divide";break;
case 4013:error="zero divide";break;
case 4014:error="unknown command";break;
case 4015:error="wrong jump (never generated error)";break;
case 4016:error="not initialized array";break;
case 4017:error="dll calls are not allowed";break;
case 4018:error="cannot load library";break;
case 4019:error="cannot call function";break;
case 4020:error="expert function calls are not allowed";break;
case 4021:error="not enough memory for temp string returned from function";break;
case 4022:error="system is busy (never generated error)";break;
case 4050:error="invalid function parameters count";break;
case 4051:error="invalid function parameter value";break;
case 4052:error="string function internal error";break;
case 4053:error="some array error";break;
case 4054:error="incorrect series array using";break;
case 4055:error="custom indicator error";break;
case 4056:error="arrays are incompatible";break;
case 4057:error="global variables processing error";break;
case 4058:error="global variable not found";break;
case 4059:error="function is not allowed in testing mode";break;
case 4060:error="function is not confirmed";break;
case 4061:error="send mail error";break;
case 4062:error="string parameter expected";break;
case 4063:error="integer parameter expected";break;
case 4064:error="double parameter expected";break;
case 4065:error="array as parameter expected";break;
case 4066:error="requested history data in update state";break;
case 4099:error="end of file";break;
case 4100:error="some file error";break;
case 4101:error="wrong file name";break;
case 4102:error="too many opened files";break;
case 4103:error="cannot open file";break;
case 4104:error="incompatible access to a file";break;
case 4105:error="no order selected";break;
case 4106:error="unknown symbol";break;
case 4107:error="invalid price parameter for trade function";break;
case 4108:error="invalid ticket";break;
case 4109:error="trade is not allowed";break;
case 4110:error="longs are not allowed";break;
case 4111:error="shorts are not allowed";break;
case 4200:error="object is already exist";break;
case 4201:error="unknown object property";break;
case 4202:error="object is not exist";break;
case 4203:error="unknown object type";break;
case 4204:error="no object name";break;
case 4205:error="object coordinates error";break;
case 4206:error="no specified subwindow";break;
default:error="unknown error";
}
return(error);
}
myeatrade myeatrade 2013-02-06 23:25
因为加仓模块更新过,将所有模型下的加仓模块重新设置并提交保存之后,就能正确生成代码
Page 1 of 1 1

请登录后发表回复,如果你还没有账户你可以 免费注册

回到 意见 & 反馈
menu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loader