#include <stderror.mqh>
#include <stdlib.mqh>
extern string EAName = "OM_2WAY_v3.6";
extern int MagicNumberBuy = 123456789; // ?????? ?? ???????
extern int MagicNumberSell = 987654321; // ?????? ?? ???????
extern string s1 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";
extern bool OnScreenInfo = true; //????? ???? ?? ?????
extern bool ShowClock = false; //????? ??????? ?? ?????
extern bool DrawAveragePrice = false; //????? ????? ??????? ????
extern bool DualTrade = false; //?????????? ?? ????????????? ????????
extern bool NewTradeBuy = true; //?????????? ?? ????? ???????
extern bool NewTradeSell = true; //?????????? ?? ????? ???????
extern string s4 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";
extern string s5 = ">>> ???????? ?????";
extern bool CheckNewBar = true; // ??????????? ????? ?????? ?? ????? ?????...????? ????????
extern int MaxTrades = 30; // ??????????? ?????????? ???????????? ???????? ???????
extern double PipStep = 25.0; // ??? ????? ???????????? ????? ?????
extern double PipStepExponent = 1.0; // ??????????
extern int StaticTakeProfit = 15; // ??????????? ???? ??????
extern string s6 = ">>> ???????? ?????????? ???????";
extern double ProfitPersent = 30; // ??????? ??????????(10...50)
extern double SecondProfitPersent = 50; // ??????? ?????????? ????? ???????????? ????????????? ?????
extern string s8 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";
extern string s9 = ">>> ?????? ????";
extern double StartLot = 0.2; // ?????? ??????? ???? ??? ?????? ??????n
extern double LotIncrement = 0.1; // ?????? ?????????? ??????? ? ???? * ?? ?????????? ???????
extern double MaxLot = 30; // ???????????? ???????? ????
extern bool UseAutoLot = false; //????????????? ???? ????...??????? ?? ????
extern double AutoLot = 0.5; //??????? ??? ??????? ????...????????? ?? ???????
extern double AutoLotIncrement = 0.3; // ??????? ?????????? ??????? ? ???? * ?? ?????????? ???????
extern string s10 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>";
extern string s11 = ">>> ???? ?????? ??";
extern int iMA_Period = 700;
extern int iMA_OpenDistance = 60;
int i = 0;
int TimePrev = 0;
int vDigits;
int OrderSended = 0;
int TotalBuyOrders = 0, TotalSellOrders = 0;
int Lpos, Lpos1, Cpos;
double Spread;
double mPipStep;
double vPoint;
double PriceTarget, AveragePrice, LastBuyPrice, LastSellPrice;
double BuySummLot,SellSummLot,TotalProfitBuy,TotalProfitSell;
double BLot, SLot;
double Cprofit, Lprofit, Lprofit1, PrcCL;
string LastOrderComment = "";
string BComment, SComment;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
ObjectDelete("CurrTime");
ObjectDelete("BuyZeroLevel");
ObjectDelete("BuyAveragePrice");
ObjectDelete("SellZeroLevel");
ObjectDelete("SellAveragePrice");
return(0);
}
int start()
{
// код доступен только после оплаты
}
void CheckTakeProfit()
{
TotalBuyOrders = CountOfOrders(MagicNumberBuy);
PriceTarget = 0;
AveragePrice = 0;
if(TotalBuyOrders > 0)
{
PriceTarget = FindFirstOrderParameter(MagicNumberBuy, "price") + StaticTakeProfit*vPoint;
AveragePrice = CalculateAveragePrice(MagicNumberBuy);
}
for (i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberBuy)
if (NormalizeDouble(OrderTakeProfit(),vDigits) != NormalizeDouble(PriceTarget,vDigits)) ModifyTakeProfit(PriceTarget);
if(DrawAveragePrice == true)
{
if(AveragePrice == 0)
{
if(ObjectFind("BuyZeroLevel") != -1) ObjectDelete("BuyZeroLevel");
if(ObjectFind("BuyAveragePrice") != -1) ObjectDelete("BuyAveragePrice");
}
else
{
if(ObjectFind("BuyZeroLevel") == -1)
{
ObjectCreate("BuyZeroLevel",OBJ_HLINE, 0, 0, AveragePrice);
ObjectSet("BuyZeroLevel", OBJPROP_COLOR, Blue);
ObjectSet("BuyZeroLevel", OBJPROP_STYLE, DRAW_SECTION);
}
else ObjectSet("BuyZeroLevel", OBJPROP_PRICE1, AveragePrice);
if(ObjectFind("BuyAveragePrice") == -1)
{
ObjectCreate("BuyAveragePrice",OBJ_HLINE, 0, 0, AveragePrice + StaticTakeProfit*vPoint);
ObjectSet("BuyAveragePrice", OBJPROP_COLOR, Blue);
ObjectSet("BuyAveragePrice", OBJPROP_STYLE, DRAW_LINE);
}
else ObjectSet("BuyAveragePrice", OBJPROP_PRICE1, AveragePrice + StaticTakeProfit*vPoint);
}
}
PriceTarget = 0;
AveragePrice = 0;
TotalSellOrders = CountOfOrders(MagicNumberSell);
if(TotalSellOrders > 0)
{
PriceTarget = FindFirstOrderParameter(MagicNumberSell, "price") - StaticTakeProfit*vPoint;
AveragePrice = CalculateAveragePrice(MagicNumberSell);
}
for (i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberSell)
if (NormalizeDouble(OrderTakeProfit(),vDigits) != NormalizeDouble(PriceTarget,vDigits)) ModifyTakeProfit(PriceTarget);
if(DrawAveragePrice == true)
{
if(AveragePrice == 0)
{
if(ObjectFind("SellZeroLevel") != -1) ObjectDelete("SellZeroLevel");
if(ObjectFind("SellAveragePrice") != -1) ObjectDelete("SellAveragePrice");
}
else
{
if(ObjectFind("SellZeroLevel") == -1)
{
ObjectCreate("SellZeroLevel",OBJ_HLINE, 0, 0, AveragePrice);
ObjectSet("SellZeroLevel", OBJPROP_COLOR, Red);
ObjectSet("SellZeroLevel", OBJPROP_STYLE, DRAW_SECTION);
}
else ObjectSet("SellZeroLevel", OBJPROP_PRICE1, AveragePrice);
if(ObjectFind("SellAveragePrice") == -1)
{
ObjectCreate("SellAveragePrice",OBJ_HLINE, 0, 0, AveragePrice - StaticTakeProfit*vPoint);
ObjectSet("SellAveragePrice", OBJPROP_COLOR, Red);
ObjectSet("SellAveragePrice", OBJPROP_STYLE, DRAW_LINE);
}
else ObjectSet("SellAveragePrice", OBJPROP_PRICE1, AveragePrice - StaticTakeProfit*vPoint);
}
}
}
double CalculateAveragePrice(int mNumber)
{
double AveragePrice = 0;
double Count = 0;
for (int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mNumber)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
AveragePrice += OrderOpenPrice() * OrderLots();
Count += OrderLots();
}
if(AveragePrice > 0 && Count > 0)
return( NormalizeDouble(AveragePrice / Count, vDigits));
else
return(0);
}
int GetSignal()
{
int Signal = 0;
double iMA_Signal = iMA(Symbol(), 0, iMA_Period, 0, MODE_SMMA, PRICE_CLOSE, 0);
int Ma_Bid_Diff = MathAbs(iMA_Signal - Bid)/vPoint;
if(Ma_Bid_Diff > iMA_OpenDistance && Bid > iMA_Signal) Signal = -1;
if(Ma_Bid_Diff > iMA_OpenDistance && Bid < iMA_Signal) Signal = 1;
return(Signal);
}
int CountOfOrders(int mNumber)
{
int count = 0;
for (int i = 0; i < OrdersTotal(); i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == mNumber))
if ((OrderType() == OP_SELL) || (OrderType() == OP_BUY))
count++;
return(count);
}
double GetLotForStep(int mNumber, int OrdCount)
{
double CurrLot = 0;
double LastOrderLot = FindLastOrderParameter(mNumber, "lot");
if(UseAutoLot == true)
{
if(LastOrderLot != 0) CurrLot = NormalizeDouble(LastOrderLot + NormalizeDouble(AccountEquity() * AutoLotIncrement/10000, 2)*OrdCount, 2);
}
else
{
if(LastOrderLot != 0) CurrLot = NormalizeDouble(LastOrderLot + LotIncrement*OrdCount, 2);
}
if(CurrLot > MaxLot) CurrLot = MaxLot;
if(CurrLot < StartLot) CurrLot = StartLot;
if(CurrLot == 0) CurrLot = StartLot;
return(CurrLot);
}
double GetStartLot()
{
double FirstLot = 0;
if(UseAutoLot == true)
{
FirstLot = NormalizeDouble(AccountEquity() * AutoLot/10000, 2);
}
else
{
FirstLot = StartLot;
}
if(FirstLot > MaxLot) FirstLot = MaxLot;
if(FirstLot < StartLot) FirstLot = StartLot;
return(FirstLot);
}
double GetPipstepForStep(int CurrStep)
{
double CurrPipstep = NormalizeDouble(PipStep * MathPow(PipStepExponent,CurrStep), 0);
return(CurrPipstep);
}
double FindFirstOrderParameter(int mNumber, string ParamName)
{
int mOrderTicket = 0;
double mOrderPrice = 0;
double mOrderLot = 0;
double mOrderProfit = 0;
int PrevTicket = 0;
int CurrTicket = 0;
for (i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mNumber)
{
CurrTicket = OrderTicket();
if (CurrTicket < PrevTicket || PrevTicket == 0)
{
PrevTicket = CurrTicket;
mOrderPrice = OrderOpenPrice();
mOrderTicket = OrderTicket();
mOrderLot = OrderLots();
mOrderProfit = OrderProfit() + OrderSwap() + OrderCommission();
}
}
if(ParamName == "price") return(mOrderPrice);
else if(ParamName == "ticket") return(mOrderTicket);
else if(ParamName == "lot") return(mOrderLot);
else if(ParamName == "profit") return(mOrderProfit);
}
double FindLastOrderParameter(int mNumber, string ParamName)
{
int mOrderTicket = 0;
double mOrderPrice = 0;
double mOrderLot = 0;
double mOrderProfit = 0;
int PrevTicket = 0;
int CurrTicket = 0;
for (i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mNumber)
{
CurrTicket = OrderTicket();
if (CurrTicket > PrevTicket)
{
PrevTicket = CurrTicket;
mOrderPrice = OrderOpenPrice();
mOrderTicket = OrderTicket();
mOrderLot = OrderLots();
mOrderProfit = OrderProfit() + OrderSwap() + OrderCommission();
LastOrПоказано первые 50% кода (символов: 17331)
Введите ваш email и нажмите кнопку, чтобы перейти к оплате.