#define VER "2.1.8"
#define DECIMAL_CONVERSION 10
extern string Comment_1 = " -- Comma separated list of Symbol Pairs: EURUSD,USDCHF";
extern string Comment_1a = " --- must be equal to the string of your account provider.";
extern string Symbols = "";
extern int MagicNumber = 3939;
extern double xFactor = 2;
extern string TimeSet = "07:32";
extern string Comment_2 = " -- Balance percentage order balance and Lot value";
extern double RiskPercent = 10;
extern string Comment_3 = " -- Percentage of the risk for each Lot";
extern string Comment_3a = " --- auto-adapted to number of pairs.";
extern double RiskPerTrade = 30;
extern int MaxAllowedOrders = 15;
extern int MaxOpenHours = 0;
extern int ProfitCheckPeriod = 3;
extern string Comment_4 = " -- Whether or not use more strict supports and resistances";
extern bool Aggressive = false;
extern bool UsePivots = true;
extern string Comment_5 = " -- Whether or not leave open profitable orders";
extern int FastPeriod = 18;
extern int SlowPeriod = 60;
extern int Selectivity = 14;
extern string Comment_6 = " -- Fixed value if RiskPerTrade == 0";
extern double Lots = 0.01;
extern int Slippage = 3;
extern string Comment_7 = " -- Set to true if broker is ECN/STP needing stops adding after order";
extern bool ECN = true;
extern double MarginPercent = 20;
extern string Comment_8 = " -- On all orders";
extern int StopLoss = 0;
extern int TrailStart = 25;
extern int TrailingAmount = 5;
extern int TakeProfit = 25;
extern string Comment_9 = " -- Whether or not manage ALL opened orders (manual too)";
extern bool AllOrders = true;
extern string Comment_10 = " -- Whether or not compute the Profit on ALL pairs";
extern bool AllSymbols = false;
extern string Comment_11 = " -- Log to console or to a file";
extern bool LogToFile = false;
extern string Comment_12 = " -- On init delete all pending orders";
extern bool InitResetOrders = true;
extern string Comment_13 = " -- Trading Time Management";
extern int StartHour = 0;
extern int EndHour = 24;
extern bool CloseAllNow = false;
extern int FridayCloseTime = 0;
int Anchor, PendingBuy, PendingSell, Buys, Sells, i, StopLevel, Spread;
int MaxOpenOrders;
double BuyLots, SellLots, PendingBuyLots, PendingSellLots;
double Amount, Profit, LastProfit, Up, Dw, SL, TP;
double LotsValue, LotsHedgeValue;
double MaxPrice,MinPrice,MaxOpenPrice,MinOpenPrice;
bool isInGain=false, blockConditionHit[], unlockOrdersPlaced=false;
int LastOrderTicket, UnlockingOrderTicket, Result, Error;
int Delta; //Order price shift (in points) from High/Low price
int LastDay;
double stopLoss, delta;
double trailStart, trailAmount, takeProfit;
double lastBarTime,lastpM5BarTime,lastpM15BarTime,lastpH1BarTime;
string SymbolsArray[0], CurrentSymbol;
bool canSell[0], canBuy[0], bullish[0], bearish[0];
bool Inited[0], DayStart[0], inited=false;
bool tradingAllowed=false;
double Pivot[0];
double Resist1[0];
double Resist2[0];
double Resist3[0];
double Support1[0];
double Support2[0];
double Support3[0];
double pPoint[0];
bool isCals[0];
double r1[0] , s1[0] ,s2[0], r2[0], r3[0], s3[0];
void init()
{
// код доступен только после оплаты
}
int deinit()
{
int Pos;
int Total=OrdersTotal();
if(Total>0)
{for(i=Total-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == TRUE)
{
Pos=OrderType();
if((Pos==OP_BUYSTOP)||(Pos==OP_SELLSTOP)||(Pos==OP_BUYLIMIT)||(Pos==OP_SELLLIMIT)){Result=OrderDelete(OrderTicket(), CLR_NONE);}
if(Result<=0){Error=GetLastError();}
else Error=0;
}
}
}
}
void start()
{
// код доступен только после оплаты
}
int CheckForClose(int s)
{
RefreshRates();
Count();
int ordersTotal=OrdersTotal();
bool skipBasket=false;
if(ordersTotal>0)
{
if(Profit>=0)
{
skipBasket=true;
}
if(skipBasket==false)
{
double ordersWinningBasket[],ordersWinningBasketTkts[],ordersLosingBasket[],ordersLosingBasketTkts[],ordersBasketHedgeTkts[];
ArrayResize(ordersWinningBasket,ordersTotal);
ArrayResize(ordersWinningBasketTkts,ordersTotal);
ArrayResize(ordersLosingBasket,ordersTotal);
ArrayResize(ordersLosingBasketTkts,ordersTotal);
ArrayResize(ordersBasketHedgeTkts,ordersTotal);
int winners=0,loosers=0;
for(i=0; i<ordersTotal; i++)
{
ordersWinningBasket[i]=0;
ordersWinningBasketTkts[i]=0;
ordersLosingBasket[i]=0;
ordersLosingBasketTkts[i]=0;
ordersBasketHedgeTkts[i]=0;
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(AllSymbols==false && OrderSymbol()!=CurrentSymbol)
{
continue;
}//if
if(AllOrders==false && OrderMagicNumber()!=MagicNumber)
{
continue;
}//if
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderProfit()+OrderSwap()+OrderCommission()>0)
{
ordersWinningBasket[winners] = OrderProfit()+OrderSwap()+OrderCommission();
ordersWinningBasketTkts[winners] = OrderTicket();
winners++;
}
else if(OrderProfit()+OrderSwap()+OrderCommission()<0)
{
ordersLosingBasket[loosers] = OrderProfit()+OrderSwap()+OrderCommission();
ordersLosingBasketTkts[loosers] = OrderTicket();
loosers++;
}
}
}
}//for
for(int w=0;w<winners;w++)
{
if( OrderSelect(ordersWinningBasketTkts[w],SELECT_BY_TICKET,MODE_TRADES) )
{
for(int l=0;l<loosers;l++)
{
if( OrderSelect(ordersLosingBasketTkts[l],SELECT_BY_TICKET,MODE_TRADES) && MathAbs(ordersLosingBasket[l])<ordersWinningBasket[w] )
{
int sum=loosers;
while(sum>0)
{
for(int ls=0;ls<sum;ls++)
{
ordersBasketHedgeTkts[0]=ordersLosingBasketTkts[l];
double hedgeProfit=ordersLosingBasket[l];
int hedgePos=1;
for(int lsp=0;lsp<sum;lsp++)
{
if( ordersLosingBasketTkts[lsp] != ordersLosingBasketTkts[l] && MathAbs(ordersLosingBasket[lsp])<ordersWinningBasket[w] )
{
ordersBasketHedgeTkts[hedgePos]=ordersLosingBasketTkts[lsp];
hedgeProfit+=ordersLosingBasket[lsp];
hedgePos++;
}//if
}//for
}//for
if(hedgePos>1 && (MathAbs(hedgeProfit*xFactor)<ordersWinningBasket[w]) )
{
Log("[BASKET] hedgePos#"+hedgePos+"; hedgeProfit#"+MathAbs(ordersLosingBasket[l])+"; ordersWinningBasket#"+ordersWinningBasket[w]);
for(int oh=0; oh<hedgePos; oh++)
{
if(OrderSelect(ordersBasketHedgeTkts[oh],SELECT_BY_TICKET,MODE_TRADES))
{
while (!IsTradeAllowed()) Sleep(100);
RefreshRates();
Log("[BASKET] - Closing Order#"+OrderTicket()+"; ["+OrderSymbol()+"]");
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_BID), Slippage, Blue);
}
else if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_ASK), Slippage, Red);
}
}
}
if(OrderSelect(ordersWinningBasketTkts[w],SELECT_BY_TICKET,MODE_TRADES))
{
while (!IsTradeAllowed()) Sleep(100);
RefreshRates();
Log("[BASKET] - Closing Order#"+OrderTicket()+"; ["+OrderSymbol()+"]");
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_BID), Slippage, Blue);
}
else if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(),MODE_ASK), Slippage, Red);
}
}
sum=0;
loosers=0;
winners=0;
break;
}
sum--;
}//while
}
}
}
}
}
}
RefreshRates();
Count();
int sx;
if(Profit>=0 && Profit>=Amount)
{
ordersTotal=OrdersTotal();
double gainingProfit=0,loosingProfit=0;
if(ordersTotal>0)
{
for(i=ordersTotal-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if( (OrderProfit()+OrderSwap()+OrderCommission())>0 )
{
gainingProfit+=(OrderProfit()+OrderSwap()+OrderCommission());
}
else
{
loosingProfit+=(OrderProfit()+OrderSwap()+OrderCommission());
}
}
}
}
if(loosingProfit==0 || gainingProfit>(MathAbs(loosingProfit)) )
{
isInGain=true;
}
else
{
isInGain=false;
}
RefreshRates();
Count();
if( isInGain==false && Profit<=(LastProfit - Amount/10) )
{
isInGain = false;
unlockOrdersPlaced=false;
LastOrderTicket = -1;
UnlockingOrderTicket = -1;
LastProfit=0;
for(sx=0; sx<ArraySize(canSell); sx++)
{
canSell[sx] = true;
canBuy[sx] = true;
CloseAll(sx, isInGain);
}
}
if(isInGain==true )
{
ordersTotal=OrdersTotal();
if(ordersTotal>0)
{
for(i=ordersTotal-1; i>=0; i--)
{
double highest=0;
double lowest=0;
double chgFromOpen=0,chgFromPeak=0,chgFromLown=0;
double ceil=0,floor=0;
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if (MarketInfo(OrderSymbol(), MODE_DIGITS) == 3 || MarketInfo(OrderSymbol(), MODE_DIGITS) == 5) {
floor = NormalizeDouble(Delta * DECIMAL_CONVERSION * MarketInfo(OrderSymbol(), MODE_POINT),MarketInfo(OrderSymbol(), MODE_DIGITS));
ceil = NormalizeDouble(TakeProfit * DECIMAL_CONVERSION * MarketInfo(OrderSymbol(), MODE_POINT),MarketInfo(OrderSymbol(), MODE_DIGITS));
}
else
{
floor = NormalizeDouble(Delta * MarketInfo(OrderSymbol(), MODE_POINT),MarketInfo(OrderSymbol(), MODE_DIGITS));
ceil = NormalizeDouble(TakeProfit * MarketInfo(OrderSymbol(), MODE_POINT),MarketInfo(OrderSymbol(), MODE_DIGITS));
}
highest = iHigh(OrderSymbol(),PERIOD_M15,iHighest(CurrentSymbol,PERIOD_M15,MODE_HIGH,ProfitCheckPeriod,1));
lowest = iLow(OrderSymbol(),PERIOD_M15,iLowest(CurrentSymbol,PERIOD_M15,MODE_LOW,ProfitCheckPeriod,1));
if( OrderType() == OP_BUY )
{
chgFromOpen = NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID) - OrderOpenPrice(), MarketInfo(OrderSymbol(),MODE_DIGITS));
chgFromPeak = NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID) - highest, MarketInfo(OrderSymbol(),MODE_DIGITS));
chgFromLown = NormalizeDouble(lowest - MarketInfo(OrderSymbol(),MODE_ASK), MarketInfo(OrderSymbol(),MODE_DIGITS));
if( (TimeCurrent()-OrderOpenTime())/60>=ProfitCheckPeriod*PERIOD_M15 &&
OrderProfit()+OrderCommission()+OrderSwap()>0 &&
chgFromOpen>0 &&
MathAbs(chgFromOpen-chgFromPeak)>=floor && MathAbs(chgFromOpen-chgFromPeak)<=ceil &&
chgFromLown<0 && MathAbs(chgFromLown)>=floor)
{
for(sx=0; sx<ArraySize(canSell); sx++)
{
canSell[sx] = true;
canBuy[sx] = true;
CloseAll(sx);
}
break;
}
}
else if( OrderType() == OP_SELL )
{
chgFromOpen = NormalizeDouble(OrderOpenPrice() - MarketInfo(OrderSymbol(),MODE_ASK), MarketInfo(OrderSymbol(),MODE_DIGITS));
chgFromPeak = NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID) - highest, MarketInfo(OrderSymbol(),MODE_DIGITS));
chgFromLown = NormalizeDouble(lowest - MarketInfo(OrderSymbol(),MODE_ASK), MarketInfo(OrderSymbol(),MODE_DIGITS));
if( (TimeCurrent()-OrderOpenTime())/60>=ProfitCheckPeriod*PERIOD_M15 &&
OrderProfit()+OrderCommission()+OrderSwap()>0 &&
chgFromOpen>0 &&
MathAbs(chgFromOpen-chgFromLown)>=floor && MathAbs(chgFromOpen-chgFromLown)<=ceil &&
chgFromPeak<0 && MathAbs(chgFromPeak)>=floor)
{
for(sx=0; sx<ArraySize(canSell); sx++)
{
canSell[sx] = true;
canBuy[sx] = true;
CloseAll(sx);
}
break;
}
}
}
}
}
}
LastProfit = Profit;
}
else
{
isInGain=false;
}
RefreshRates();
ordersTotal=OrdersTotal();
if(ordersTotal>0)
{
for(i=ordersTotal-1; i>=0; i--)
{
if(OrderSelect(iПоказано первые 50% кода (символов: 47661)
Введите ваш email и нажмите кнопку, чтобы перейти к оплате.