这是一个简单的对冲。。但是它没办法正常下单啊。。。怎么办。。求助,在线等~~~
//+------------------------------------------------------------------+
//| strategy_1.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#define MagicNumber 20150505
#define MaxNumber 10
// define input variables
int differ_Point_BUY;
int differ_Point_SELL;
input bool DynamicLotSize=false;
input double EquityPercent=2;
input double FixedLotSize=0.5;
input double StopLoss=30;
input double TakeProfit=100;
input int Slippage=5;
int BuyTicket=0;
int SellTicket=0;
double UsePoint;
double UseSlippage;
double LotSize;
int ErrorCode;
double OpenPrice;
double BuyStopLoss,SellStopLoss;
double BuyTakeProfit,SellTakeProfit;
//double ChangeStopLoss, ChangeTakeProfit;
double BuyPrice, SellPrice;
//double PricePreOne, PricePre, PriceNow;
//int count = 0;
double ConstProfit;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
DrawLabel("will","flyjingyao@163.com",2,13,"宋体",9,Aqua,0);
//--- create timer
EventSetTimer(60);
UsePoint=PipPoint(Symbol());
UseSlippage=GetSlippage(Symbol(),Slippage);
//---confirm the optimal LotSize---------------------
if(DynamicLotSize==true)
{
double RiskAmount = ACCOUNT_EQUITY * (EquityPercent/100.0);
double TickValue = MarketInfo(Symbol(),MODE_TICKVALUE);
if((Digits==3)||(Digits==5)) TickValue *= 10;
double CalcLots = (RiskAmount/StopLoss)/TickValue;
LotSize = CalcLots;
}
else LotSize = FixedLotSize;
if(LotSize<MarketInfo(Symbol(),MODE_MINLOT)) LotSize = MarketInfo(Symbol(),MODE_MINLOT);
else if (LotSize>MarketInfo(Symbol(),MODE_MAXLOT)) LotSize = MarketInfo(Symbol(),MODE_MAXLOT);
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) LotSize = NormalizeDouble(LotSize,1);
else LotSize = NormalizeDouble(LotSize,2);
//---------------------------------------------------
ConstProfit = 80*MarketInfo(Symbol(),MODE_TICKVALUE);
if((Digits==3)||(Digits==5)) ConstProfit *= 10;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//------Chasell main function--when to get in-----------------------------------------------------
// define 3 point to jude a local peak or a local vally.
if((OrdersTotal()<MaxNumber))
{
RefreshRates();
BuyPrice = Ask;
if(StopLoss>0) BuyStopLoss = OpenPrice - (StopLoss*UsePoint);
if(TakeProfit>0) BuyTakeProfit=OpenPrice + (TakeProfit*UsePoint);
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,BuyPrice,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
RefreshRates();
SellPrice = Bid;
if(StopLoss>0) BuyStopLoss = OpenPrice - (StopLoss*UsePoint);
if(TakeProfit>0) BuyTakeProfit=OpenPrice + (TakeProfit*UsePoint);
SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,SellPrice,UseSlippage,BuyStopLoss,BuyTakeProfit,"Sell Order",MagicNumber,0,Red);
if(BuyTicket == 0 && SellTicket == 0)
{Alert("Error!!!!!");}
Alert("666666666666");
}
//------------check all the order and modify--------------------------------------
for(int i=0; i<=OrdersTotal()-1;i++)
{
OrderSelect(i,SELECT_BY_POS);
if((OrderMagicNumber()==MagicNumber)&&(OrderType()==OP_BUY)&&(OrderSymbol()==Symbol())&&(OrderProfit()>ConstProfit))
{
RefreshRates();
differ_Point_BUY = Bid - BuyPrice;
double Closed = OrderClose(OrderTicket(),OrderLots(),Bid,UseSlippage,Red);
if(Closed < 0){Alert("Error when close the buy order");}
}
if((OrderMagicNumber()==MagicNumber)&&(OrderType()==OP_SELL)&&(OrderSymbol()==Symbol())&&(OrderProfit()>ConstProfit))
{
RefreshRates();
differ_Point_SELL = Ask - SellPrice;
double Closed = OrderClose(OrderTicket(),OrderLots(),Ask,UseSlippage,Red);
if(Closed < 0){Alert("Error when close the sell order");}
}
}
//------------------------------------------------------------------------------------------------------
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
double OnTester()
{
//---
double ret=0.0;
//---
//---
return(ret);
}
//+------------------------------------------------------------------+
//--------Pip Point function-----------------------
double PipPoint(string Currency)
{
double CalcPoint;
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if((CalcDigits==2)||(CalcDigits==3)) CalcPoint=0.01;
else if((CalcDigits==4)||(CalcDigits==5)) CalcPoint=0.0001;
return(CalcPoint);
}
//-------GetSlippage function-----------------------
int GetSlippage(string Currency, int SlippagePips)
{ int CalcSlippage;
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if((CalcDigits==2)||(CalcDigits==4)) CalcSlippage=SlippagePips;
if((CalcDigits==3)||(CalcDigits==5)) CalcSlippage=SlippagePips*10;
return(CalcSlippage);
}
void DrawLabel(string name,string text,int X,int Y,string FontName,int FontSize,color FontColor,int zhongxin)
{
if(ObjectFind(name)!=0)
{
ObjectDelete(name);
ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet(name,OBJPROP_CORNER,zhongxin);
ObjectSet(name,OBJPROP_XDISTANCE,X);
ObjectSet(name,OBJPROP_YDISTANCE,Y);
}
ObjectSetText(name,text,FontSize,FontName,FontColor);
WindowRedraw();
}
//---------------------------------------------------------------------------------
|