Mission Impossible Power Two Open Version 2

Mission Impossible Power Two Open Version 2

官方版无广告274

更新日期:2022-02-27分类标签: 语言:中文平台:没限制

29 人已下载 手机查看

Mission Impossible Power Two Open Version 2 Mission Impossible Power Two Open Version 2

 

//Mission Impossible Power Two : https://www.mql5.com/en/market/product/56691
#property copyright “Stiopa”
#property link “https://www.mql5.com/en/users/stiopa”
#property version “1.00”
#property strict
input string comment=”Mission Impossible Power Two Open Version”;//Comment
input int slippage=1;//Slippage
input int MagicNumber=1;//Magic Number
input ushort SL=400;//Stop Loss
input ushort TP1=15;//Take Profit (first position)
extern ushort TP=7;//Take Profit (next position)
extern double Lots=0.01;//Lots
extern double MaxLots=2;//Max Lots
input double power=13.0;//Power
extern ushort PipsStep=21;//Max PipsStep for grid
extern int MaxTrades=16;//MaxTrades
int Tick;
double gpoint_320;
string Error;
//+——————————————————————+
//| For Broker 4 or 5 digits |
//+——————————————————————+
int OnInit()
{
if(Digits==3 ||Digits==5)
gpoint_320=Point*10;
else
gpoint_320=Point;
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| Main function |
//+——————————————————————+
void OnTick()
{
if(Bars<100 || !IsConnected()|| IsTradeAllowed()==false)
return;
//———————————————–
Buy_main(“buy”);
Sell_main(“sell”);
}
//+——————————————————————+
//| Buy |
//+——————————————————————+
void Buy_main(string ot_456)
{
if(Volume[0]>1)
return;
double lots;
if(OrderAllowed())
if((cou_tra_45(ot_456)==0 && Signal_1()==1)||(cou_tra_45(ot_456)>0 && nx_77(ot_456)))
{
lots=CheckVolumeValue(ne_234(ot_456));
if(CheckMoney(lots,OP_BUY))
{
Tick=0;
while(Tick<1)
{
while(IsTradeContextBusy())
Sleep(100);
RefreshRates();
Tick=OrderSend(Symbol(),OP_BUY,lots,nor_1(Ask),slippage,0,0,comment,MagicNumber,0,Blue);
if(Tick<1)
{
Print(“Error: “,GetLastError());
Sleep(1000);
RefreshRates();
}
else
{
modify(ot_456);
}
}
}
}
}
//+——————————————————————+
//| Sell |
//+——————————————————————+
void Sell_main(string ot_456)
{
if(Volume[0]>1)
return;
double lots;
if(OrderAllowed())
if((cou_tra_45(ot_456)==0 && Signal_1()==2)||(cou_tra_45(ot_456)>0 && nx_77(ot_456)))
{
lots=CheckVolumeValue(ne_234(ot_456));
if(CheckMoney(lots,OP_SELL))
{
Tick=0;
while(Tick<1)
{
while(IsTradeContextBusy())
Sleep(100);
RefreshRates();
Tick=OrderSend(Symbol(),OP_SELL,lots,nor_1(Bid),slippage,0,0,comment,MagicNumber,0,Red);
if(Tick<1)
{
Print(“Error: “,GetLastError());
Sleep(1000);
RefreshRates();
}
else
{
modify(ot_456);
}
}
}
}
}
//+——————————————————————+
//| Modify Take Profit and Stop Loss |
//+——————————————————————+
void modify(string ot_456)
{
int order=cou_tra_45(ot_456);
int tr_45;
double TP_all,SL_all,price;
double avp_2=0;
bool d;
if(order>1){
avp_2=avp_next(ot_456);
}
for(tr_45=OrdersTotal()-1; tr_45>=0; tr_45–)
{
if(!OrderSelect(tr_45,SELECT_BY_POS,MODE_TRADES))
Print(“Error in OrderSelect Takeprofit==true. Error code=”,GetLastError());
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(ot_456==”buy”)
{
if(OrderType()==OP_BUY)
{
if(order>1)
{
TP_all=nor_1(avp_2+(TP*gpoint_320));
SL_all=nor_1(avp_2-(SL*gpoint_320));
price=avp_2;
}
else
{
TP_all=nor_1(OrderOpenPrice()+(TP1*gpoint_320));
SL_all=nor_1(OrderOpenPrice()-(SL*gpoint_320));
price=OrderOpenPrice();
}
if(check_sl_tp(OP_BUY,SL_all,TP_all))
if(OrderTakeProfit()!=TP_all)
d=OrderModify(OrderTicket(),nor_1(price),SL_all,TP_all,0,Yellow);
if(d)
Print(“All TP for buy successfully”);
else
Print(“Error in OrderModify buy Average + TP. Error code=”,GetLastError());
}
}
if(ot_456==”sell”)
{
if(OrderType()==OP_SELL)
{
if(order>1)
{
TP_all=nor_1(avp_2-(TP*gpoint_320));
SL_all=nor_1(avp_2+(SL*gpoint_320));
}
else
{
TP_all=nor_1(OrderOpenPrice()-(TP1*gpoint_320));
SL_all=nor_1(OrderOpenPrice()+(SL*gpoint_320));
price=OrderOpenPrice();
}
if(check_sl_tp(OP_SELL,SL_all,TP_all))
if(OrderTakeProfit()!=TP_all)
d=OrderModify(OrderTicket(),nor_1(price),SL_all,TP_all,0,Yellow);
if(d)
Print(“All TP for sell successfully”);
else
Print(“Error in OrderModify sell Average – TP. Error code=”,GetLastError());
}
}
}
}
}
//+——————————————————————+
//| Average Order Price |
//+——————————————————————+
double avp_next(string ot_456)
{
double
Count=0,
avp_2=0;
int tr_45;
for(tr_45=OrdersTotal()-1; tr_45>=0; tr_45–)
{
if(OrderSelect(tr_45,SELECT_BY_POS,MODE_TRADES)==False)
Print(“Error in OrderSelect avp_2. Error code=”,GetLastError());
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(ot_456==”buy”)
{
if(OrderType()==OP_BUY)
{
avp_2=avp_2+OrderOpenPrice()*OrderLots();
Count=Count+OrderLots();
}
}
if(ot_456==”sell”)
{
if(OrderType()==OP_SELL)
{
avp_2=avp_2+OrderOpenPrice()*OrderLots();
Count=Count+OrderLots();
}
}
}
}
if(avp_2>0 && Count>0)
avp_2=NormalizeDouble(avp_2/Count,Digits);
return(avp_2);
}
//+——————————————————————+
//| Digits |
//+——————————————————————+
int Lots_Digits()
{
double Lotstep=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
int LotsDigits=(int)MathCeil(MathAbs(MathLog(Lotstep)/MathLog(10)));
return(LotsDigits);
}
//+——————————————————————+
//| Normalize |
//+——————————————————————+
double nor_1(double ad_0)
{
return (NormalizeDouble(ad_0, Digits));
}
//+——————————————————————+
//| Signal |
//+——————————————————————+
int Signal_1()
{
double
Close_1=iClose(Symbol(),0,1),
Open_1=iOpen(Symbol(),0,1);
if(Close_1<Open_1)
return(2);
if(Close_1>Open_1)
return(1);
return(0);
}
//+——————————————————————+
//| Next positions |
//+——————————————————————+
bool nx_77(string ot_456)
{
if(ot_456==”buy”)
{
if(cou_tra_45(ot_456)>=MaxTrades)
return false;
if(control_price(ot_456)>=PipsStep *gpoint_320)
{
return(true);
}
}
if(ot_456==”sell”)
{
if(cou_tra_45(ot_456)>=MaxTrades)
return false;
if(control_price(ot_456)>=PipsStep*gpoint_320)
{
return(true);
}
}
return(false);
}
//+——————————————————————+
//| Control price |
//+——————————————————————+
double control_price(string ot_456)
{
double a_0=0;
if(ot_456==”buy”)
{
a_0=nor_1(select(ot_456,”price”)-Ask);
}
if(ot_456==”sell”)
{
a_0=nor_1(Bid-select(ot_456,”price”));
}
return(a_0);
}
//+——————————————————————+
//| Lots for first and next position |
//+——————————————————————+
double ne_234(string ot_456)
{
double lo_45=0;
if(ot_456==”buy”)
{
double li_0=MathAbs(multiplier(ot_456)*power);
if(cou_tra_45(ot_456)>0)
lo_45=(double)DoubleToStr(li_0+Lots,Lots_Digits());
else
lo_45=NormalizeDouble(Lots,Lots_Digits());
}
if(ot_456==”sell”)
{
double li_0=MathAbs(multiplier(ot_456)*power);
if(cou_tra_45(ot_456)>0)
lo_45=(double)DoubleToStr(li_0+Lots,Lots_Digits());
else
lo_45=NormalizeDouble(Lots,Lots_Digits());
}
if(lo_45>MaxLots)
lo_45=MaxLots;
return(lo_45);
}
//+——————————————————————+
//| Multiplier |
//+——————————————————————+
double multiplier(string ot_456)
{
double avp_2=0,
Count=0;
int tr_45;
for(tr_45=OrdersTotal()-1; tr_45>=0; tr_45–)
{
if(OrderSelect(tr_45,SELECT_BY_POS,MODE_TRADES)==False)
Print(“Error in OrderSelect avp_2. Error code=”,GetLastError());
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(ot_456==”buy”)
{
if(OrderType()==OP_BUY)
{
avp_2=avp_2+OrderOpenPrice()*OrderProfit();
}
}
if(ot_456==”sell”)
{
if(OrderType()==OP_SELL)
{
avp_2=avp_2+OrderOpenPrice()*OrderProfit();
}
}
}
}
avp_2=avp_2/Bid;
return(avp_2*0.0001);
}
//+——————————————————————+
//| Check Stop Loss and Take Profit |
//+——————————————————————+
bool check_sl_tp(ENUM_ORDER_TYPE type,double sl,double tp)
{
int stops_level=(int)SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
bool SL_check=false,TP_check=false;
switch(type)
{
case ORDER_TYPE_BUY:
{
SL_check=((Bid-sl>stops_level*gpoint_320) || sl==0);
TP_check=((tp-Bid>stops_level*gpoint_320) || tp==0);
return(SL_check && TP_check);
}
case ORDER_TYPE_SELL:
{
SL_check=((sl-Ask>stops_level*gpoint_320) || sl==0);
TP_check=((Ask-tp>stops_level*gpoint_320)|| tp==0);
return(TP_check && SL_check);
}
break;
}
return false;
}
//+——————————————————————+
//| Check Money |
//+————————————————————–+
bool CheckMoney(double lots,int type)
{
string text;
double margin=AccountFreeMarginCheck(Symbol(),type,lots);
if(margin<0)
{
switch(type)
{
case 0:
text=”Buy”;
break;
case 1:
text=”Sell”;
break;
default:
text=”Order”;
}
Print(“Not enough money for “,text,” “,lots,” Error code=”,GetLastError());
return(false);
}
return(true);
}
//+——————————————————————+
//| Check Volume Value |
//+——————————————————————+
double CheckVolumeValue(double check)
{
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
if(check<min_volume)
return(min_volume);
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
if(check>max_volume)
return(max_volume);
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(check/volume_step);
if(MathAbs(ratio*volume_step-check)>0.0000001)
return(ratio*volume_step);
return(check);
}
//+——————————————————————+
//| Order Allowed |
//+——————————————————————+
bool OrderAllowed()
{
int max_orders=(int)AccountInfoInteger(ACCOUNT_LIMIT_ORDERS);
if(max_orders==0)
return(true);
int orders_t=OrdersTotal();
return(orders_t<max_orders);
}
//+——————————————————————+
//| Count orders |
//+——————————————————————+
int cou_tra_45(string ot_456)
{
int count=0,tr_45,oldticketnumber=0;
for(tr_45=OrdersTotal()-1; tr_45>=0; tr_45–)
{
if(OrderSelect(tr_45,SELECT_BY_POS,MODE_TRADES)==False)
Print(“Error in OrderSellect cou_tra_45 . Error code=”,GetLastError());
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(ot_456==”buy”)
{
if(OrderType()==OP_BUY)
{
count++;
}
}
if(ot_456==”sell”)
{
if(OrderType()==OP_SELL)
{
count++;
}
}
}
}
return(count);
}
//+——————————————————————+
//| Choose what you need |
//+——————————————————————+
double select(string ot_456,string a_0)
{
RefreshRates();
double open=0;
int tr_45,oldticketnumber=0,n=0;
for(tr_45=OrdersTotal()-1; tr_45>=0; tr_45–)
{
if(OrderSelect(tr_45,SELECT_BY_POS,MODE_TRADES)==False)
Print(“Error in OrderSelect select(). Error code=”,GetLastError());
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(ot_456==”buy”)
{
if(OrderType()==OP_BUY)
{
if(OrderTicket()>oldticketnumber)
{
open=OrderOpenPrice();
oldticketnumber=OrderTicket();
}
}
}
if(ot_456==”sell”)
{
if(OrderType()==OP_SELL)
{
if(OrderTicket()>oldticketnumber)
{
open=OrderOpenPrice();
oldticketnumber=OrderTicket();
}
}
}
}
}
if(a_0==”price”)
return(open);
return(0);
}
//+——————————————————————+

如果你对文件有了解,请帮助投票!

If you are familiar with the file, please help vote!

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位投票人。

相关软件

暂无评论

暂无评论...
Ads Blocker Image Powered by Code Help Pro

检测到广告拦截程序!!!Ads Blocker Detected!!!

我们检测到您正在使用扩展来屏蔽广告。请通过禁用这些广告屏蔽程序或者把网站加入白名单来支持我们。

We have detected that you are using an extension to block advertisements. Please support us by disabling these advertising blocking programs or adding the website to the whitelist.