就是下面这个EA,只能做欧元,能不能改成可以做其他货币的,当然不止6位数的货币,需要4位数3位数都能够运行的,大神帮我改改,谢谢。
//+------------------------------------------------------------------+
// Copyright , AAA
// System Name: AAA
//+------------------------------------------------------------------+
#property copyright 20190607 by AAA
#property link AAA
///////////////////////////Model1////////////////////////////
extern string Model1_tip= BUY
extern bool m1alert=true;string M1_Symbol;double M1_Point;int M1_Mt;datetime Model1_lastOpenOrderTime;
extern string M1S1_tip= Strategy Group1
extern string M1S1_Filter_tip= Filter Conditions
extern string M1S1_Exec_tip= Execution Conditions
extern string M1S1_Shift_tip= Shift Conditions
extern string M1S1C1_Shift_tip= Shift Condition 1
///////////////////////////Model2////////////////////////////
extern string Model2_tip= SELL
extern bool m2alert=true;string M2_Symbol;double M2_Point;int M2_Mt;datetime Model2_lastOpenOrderTime;
extern string M2S1_tip= Strategy Group1
extern string M2S1_Filter_tip= Filter Conditions
extern string M2S1_Exec_tip= Execution Conditions
extern string M2S1_Shift_tip= Shift Conditions
extern string M2S1C1_Shift_tip= Shift Condition 1
///////////////////////////Model3////////////////////////////
extern string Model3_tip= STOP
string M3_Symbol;double M3_Point;int M3_Mt;datetime Model3_lastOpenOrderTime;
extern string M3S1_tip= Strategy Group1
extern string M3S1_Filter_tip= Filter Conditions
extern string M3S1_Exec_tip= Execution Conditions
extern string M3S1_Shift_tip= Shift Conditions
extern string M3S1C1_Shift_tip= Shift Condition 1
double m1s1shift1_A_val;double m1s1shift1_B_val;
double m2s1shift1_A_val;double m2s1shift1_B_val;
double m3s1shift1_A_val;double m3s1shift1_B_val;
datetime lastBarTime[4];
int modelMagic[4];
bool canClose31=true;
bool closeOneTime31=1;
bool canClose32=true;
bool closeOneTime32=1;
int maxtry=10;
bool printLog=true;
int sleepTime=2000;
int init(){
M1_Symbol=Symbol(); double m1_point = MarketInfo(M1_Symbol,MODE_POINT); int m1_digits = MarketInfo(M1_Symbol,MODE_DIGITS); if(m1_digits==3 || m1_digits==5){
M1_Point=m1_point*10;
M1_Mt=10;
}else{
M1_Point=m1_point;
M1_Mt=1;
}
modelMagic[1]=150232;
M2_Symbol=Symbol(); double m2_point = MarketInfo(M2_Symbol,MODE_POINT); int m2_digits = MarketInfo(M2_Symbol,MODE_DIGITS); if(m2_digits==3 || m2_digits==5){
M2_Point=m2_point*10;
M2_Mt=10;
}else{
M2_Point=m2_point;
M2_Mt=1;
}
modelMagic[2]=150233;
M3_Symbol=Symbol(); double m3_point = MarketInfo(M3_Symbol,MODE_POINT); int m3_digits = MarketInfo(M3_Symbol,MODE_DIGITS); if(m3_digits==3 || m3_digits==5){
M3_Point=m3_point*10;
M3_Mt=10;
}else{
M3_Point=m3_point;
M3_Mt=1;
}
modelMagic[3]=150234;
}
int start(){
runModel1();runModel2();runModel3();
return (0);
}
void runModel1(){
int totalPosition = countPositionByMagicSymbol(150232,M1_Symbol,0);
if( 0 0 (MarketInfo(M1_Symbol,MODE_ASK)-MarketInfo(M1_Symbol,MODE_BID)) 0*M1_Point )return;
if((0!=0) (!isNewBar(M1_Symbol,5,1))) return;
bool canRunCheck=false;
int maxOrder=5;
if(!0)maxOrder=1;
if(totalPosition maxOrder)canRunCheck=true;
if(maxOrder 1 totalPosition =1){
if(TimeCurrent() (Model1_lastOpenOrderTime+5*60))canRunCheck=false;
if(!checkCanOpenMaxOrder(0,0,M1_Symbol,150232,M1_Point))canRunCheck=false;
}
if(0 0 totalPosition 0)breakEven(150232,M1_Symbol,0,M1_Point);
if(0 0 0 =2 totalPosition 0)trailStop(150232,M1_Symbol,0,50,20,M1_Point);
if(canRunCheck){
if(checkM1S1()){
int orderType=OP_BUY;if(0 0)orderType=OP_SELL;
if(1 0){
double lots = getlots(0.1,0,2,0,M1_Symbol,M1_Mt,0.1,100);
int sl= 0;
int tp = 0;
int ticket = openposition(
M1_Symbol,
orderType,
lots,
sl,
tp,
150232,
1,
1,
0,
0,
20,
720,
M1_Point,
M1_Mt,
0);
Model1_lastOpenOrderTime = getOrderOpenTime(ticket);}
if(m1alert){soundalert( alert.wav ,1);m1alert=false;}
}
else{m1alert=true;}
}
}
void runModel2(){
int totalPosition = countPositionByMagicSymbol(150233,M2_Symbol,0);
if( 0 0 (MarketInfo(M2_Symbol,MODE_ASK)-MarketInfo(M2_Symbol,MODE_BID)) 0*M2_Point )return;
if((0!=0) (!isNewBar(M2_Symbol,5,2))) return;
bool canRunCheck=false;
int maxOrder=5;
if(!0)maxOrder=1;
if(totalPosition maxOrder)canRunCheck=true;
if(maxOrder 1 totalPosition =1){
if(TimeCurrent() (Model2_lastOpenOrderTime+5*60))canRunCheck=false;
if(!checkCanOpenMaxOrder(0,0,M2_Symbol,150233,M2_Point))canRunCheck=false;
}
if(0 0 totalPosition 0)breakEven(150233,M2_Symbol,0,M2_Point);
if(0 0 0 =2 totalPosition 0)trailStop(150233,M2_Symbol,0,50,20,M2_Point);
if(canRunCheck){
if(checkM2S1()){
int orderType=OP_SELL;if(0 0)orderType=OP_BUY;
if(1 0){
double lots = getlots(0.1,0,2,0,M2_Symbol,M2_Mt,0.1,100);
int sl= 0;
int tp = 0;
int ticket = openposition(
M2_Symbol,
orderType,
lots,
sl,
tp,
150233,
1,
1,
0,
0,
20,
720,
M2_Point,
M2_Mt,
0);
Model2_lastOpenOrderTime = getOrderOpenTime(ticket);}
if(m2alert){soundalert( alert.wav ,1);m2alert=false;}
}
else{m2alert=true;}
}
}
void runModel3(){
if((0!=0) (!isNewBar(M3_Symbol,5,3))) return;
bool canRunCheck=false;
if(checkHasPosition(150232,M1_Symbol)){canRunCheck=true;}else{if(closeOneTime31)canClose31=true;}
bool spread31=true; if( 0 0 (MarketInfo(M1_Symbol,MODE_ASK)-MarketInfo(M1_Symbol,MODE_BID)) 0*M1_Point )spread31=false;
if(checkHasPosition(150233,M2_Symbol)){canRunCheck=true;}else{if(closeOneTime32)canClose32=true;}
bool spread32=true; if( 0 0 (MarketInfo(M2_Symbol,MODE_ASK)-MarketInfo(M2_Symbol,MODE_BID)) 0*M2_Point )spread32=false;
if(canRunCheck){
if(checkM3S1()){
bool allClose;
if(canClose31 spread31){
allClose=closeModelPosition(150232,M1_Symbol,1,0,M1_Mt,0);
if(closeOneTime31 allClose)canClose31=false;
if(!checkHasPosition(150232,M1_Symbol)){if(closeOneTime31)canClose31=true;}
}
if(canClose32 spread32){
allClose=closeModelPosition(150233,M2_Symbol,1,0,M2_Mt,0);
if(closeOneTime32 allClose)canClose32=false;
if(!checkHasPosition(150233,M2_Symbol)){if(closeOneTime32)canClose32=true;}
}
}
}
}
bool checkM1S1(){
int i;
int limit = 100; bool revalue=false;
int preBar=0;
if(0==2)preBar=1;
bool filter12=true;
bool filter34=true;
bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false;
if(exec12_a exec12_b)exec12=true;
exec12=true;
bool bshift=true;
if(bshift){
m1s1shift1_A_val=iClose(Symbol(),0,0);
m1s1shift1_B_val=iClose(Symbol(),0,1);
if(!(m1s1shift1_A_val (m1s1shift1_B_val+0))){bshift=false;}
}
if(filter12 filter34 exec12 bshift)revalue=true;
return (revalue);
}
bool checkM2S1(){
int i;
int limit = 100; bool revalue=false;
int preBar=0;
if(0==2)preBar=1;
bool filter12=true;
bool filter34=true;
bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false;
if(exec12_a exec12_b)exec12=true;
exec12=true;
bool bshift=true;
if(bshift){
m2s1shift1_A_val=iClose(Symbol(),0,0);
m2s1shift1_B_val=iClose(Symbol(),0,1);
if(!(m2s1shift1_A_val (m2s1shift1_B_val-0))){bshift=false;}
}
if(filter12 filter34 exec12 bshift)revalue=true;
return (revalue);
}
bool checkM3S1(){
int i;
int limit = 100; bool revalue=false;
int preBar=0;
if(0==2)preBar=1;
bool filter12=true;
bool filter34=true;
bool exec12_temp=true, exec12_a=false, exec12_b=true,exec12=false;
if(exec12_a exec12_b)exec12=true;
exec12=true;
bool bshift=true;
if(bshift){
m3s1shift1_A_val=iClose(Symbol(),0,1);
m3s1shift1_B_val=iOpen(Symbol(),0,1);
if(!(m3s1shift1_A_val!=(m3s1shift1_B_val+0))){bshift=false;}
}
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);
}
}
bool checkCanOpenMaxOrder(int mode,int pip,string symbol,int magic,double point){
bool result=true;int i,count=0;double profitPip;
switch(mode){
case 0: result=true;break;
case 1:
for(i=OrdersTotal();i i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==symbol OrderMagicNumber()==magic){
count++;
if(!(OrderProfit() 0)){result=false;break;}
if(count==1){
if(OrderType()==OP_BUY)profitPip = (MarketInfo(OrderSymbol(),MODE_BID) - OrderOpenPrice())/point;
if(OrderType()==OP_SELL)profitPip = (OrderOpenPrice() - MarketInfo(OrderSymbol(),MODE_ASK))/point;
if(!(profitPip pip)){result=false;break;}
}
}
}
break;
case 2:
for(i=OrdersTotal();i i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==symbol OrderMagicNumber()==magic){
count++;
if(!(OrderProfit() 0)){result=false;break;}
if(count==1){
if(OrderType()==OP_BUY)profitPip = (MarketInfo(OrderSymbol(),MODE_BID) - OrderOpenPrice())/point;
if(OrderType()==OP_SELL)profitPip = (OrderOpenPrice() - MarketInfo(OrderSymbol(),MODE_ASK))/point;
if(!((-1*profitPip) pip)){result=false;break;}
}
}
}
break;
}
return (result);
}
double getlots(double DefaultLots,bool MoneyManage,double Risk,double StopLoss,string symbol,int mt,double MinLots,double MaxLots){
double lot;
if(MoneyManage){
int LotDigits=0;
if(MarketInfo(symbol,MODE_MINLOT)==0.1)LotDigits=1;
else if(MarketInfo(symbol,MODE_MINLOT)==0.01)LotDigits=2;
else if(MarketInfo(symbol,MODE_MINLOT)==0.001)LotDigits=3;
if(StopLoss 0)lot=NormalizeDouble((AccountEquity()*(Risk/100))/(MarketInfo(symbol,MODE_TICKVALUE)*mt*StopLoss ),LotDigits);
else lot= NormalizeDouble(AccountEquity()/10000*Risk,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 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);
}
}
}
}
}
}
}
}
void soundalert(string fileName,int reTimes){for(int i=0;i =reTimes;i++){PlaySound(fileName);Sleep(5000);}}
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);
}
bool checkHasPosition(int magic,string symbol){
if(OrdersTotal() 0){
for(int i=OrdersTotal();i i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==magic OrderSymbol()==symbol) return(true);
}
}
return (false);
}
bool closeModelPosition(int magic,string symbol,double percent,int m,int mt,int Slippage){
double closeLots=0;
bool AllClose=true;
bool succeed;int try;
if(OrdersTotal() 0){
for(int i=OrdersTotal();i i--){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==magic OrderSymbol()==symbol){
if(TimeCurrent()-OrderOpenTime() m*60){AllClose=false;continue;}
closeLots=OrderLots()*percent;
if(closeLots MarketInfo(OrderSymbol(),MODE_MINLOT))closeLots=MarketInfo(OrderSymbol(),MODE_MINLOT);
if(OrderType()==OP_BUY){
succeed=0;try=0;
while(!succeed try maxtry){
RefreshRates();
succeed = OrderClose(OrderTicket(),closeLots,MarketInfo(symbol,MODE_BID),Slippage*mt);
if(!succeed){try++;if(printLog)Print( Error close order in CloseModel , +OrderTicket(), ! ,errordescription(GetLastError()), retry +try+ times Sleep(sleepTime);}
}
if(!succeed){AllClose=false;}
}
if(OrderType()==OP_SELL){
succeed=0;try=0;
while(!succeed try maxtry){
RefreshRates();
succeed = OrderClose(OrderTicket(),closeLots,MarketInfo(symbol,MODE_ASK),Slippage*mt);
if(!succeed){try++;if(printLog)Print( Error close order in CloseModel , +OrderTicket(), ! ,errordescription(GetLastError()), retry +try+ times Sleep(sleepTime);}
}
if(!succeed){AllClose=false;}
}
if(OrderType()==OP_BUYLIMIT||OrderType()==OP_BUYSTOP||OrderType()==OP_SELLLIMIT||OrderType()==OP_SELLSTOP){
RefreshRates();
if(!OrderDelete(OrderTicket())){AllClose=false;}
}
}
}
}
return (AllClose);
}
请教EA只能做欧元,怎么改成可以做其他货币的。
回复:0 浏览:590
- 楼主admin 圈主
- 2020-01-01 15:39