
//+------------------------------------------------------------------+
//| LockInfo.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
extern int BUPoint = 50;
extern int Prohod = 150;
double ZeroLevelAll=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double BuyLots()
{
double lot=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) lot+=OrderLots();
}
}
}
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double SellLots()
{
double lot=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL) lot+=OrderLots();
}
}
}
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Profit()
{
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL || OrderType()==OP_BUY) pr+=OrderProfit()+OrderSwap()+OrderCommission();
}
}
}
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double SellPrice()
{
int count=0;
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL)
{
pr+=OrderOpenPrice(); count++;
}
}
}
}
if(count>0)pr=pr/count;
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double BuyPrice()
{
int count=0;
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
pr+=OrderOpenPrice(); count++;
}
}
}
}
if(count>0)pr=pr/count;
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountBuy()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Mode()
{
bool m;
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL)
{
if(Ask<ZeroLevelAll-Prohod*Point)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),ZeroLevelAll,OrderTakeProfit(),0,Red);
}
}
if(OrderType()==OP_BUY)
{
if(Ask<ZeroLevelAll-Prohod*Point)
{
if(OrderTakeProfit()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ZeroLevelAll,0,Red);
}
}
}
}
}
return;
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double lots=BuyLots()-SellLots();
double sum=BuyPrice()*BuyLots()-SellPrice()*SellLots();
if(lots>0)
{
ZeroLevelAll=sum/lots; //уровень безубытка для открытых ордеров, перевес Buy
}
if(lots<0)
{
ZeroLevelAll=sum/lots; //уровень безубытка для открытых ордеров, перевес Sell
}
if(IsTesting())
{
int r=0;
if(OrdersTotal()<1)
{
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
r=OrderSend(Symbol(),OP_SELL,0.65,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
}
}
Mode();
Comment("\n Sell Lots: ",SellLots(),
"\n Buy Lots: ",BuyLots(),
"\n Sell Pos: ",CountSell(),
"\n Buy Pos: ",CountBuy(),
"\n Lock Lot Buy: ",0.3*BuyLots()+BuyLots(),
"\n Lock Lot Sell: ",0.3*SellLots()+SellLots(),
"\n BU Buy: ",ZeroLevelAll,
"\n BU Sell: ",ZeroLevelAll,
"\n Profit: ",Profit());
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| LockInfo.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
extern int BUPoint = 50;
extern int Prohod = 150;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double BuyLots()
{
double lot=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) lot+=OrderLots();
}
}
}
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double SellLots()
{
double lot=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL) lot+=OrderLots();
}
}
}
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Profit()
{
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL || OrderType()==OP_BUY) pr+=OrderProfit()+OrderSwap()+OrderCommission();
}
}
}
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double SellPrice()
{
int count=1;
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL)
{
pr+=OrderOpenPrice();
count++;
}
}
}
}
pr=pr/count;
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double BuyPrice()
{
int count=1;
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
pr+=OrderOpenPrice();
count++;
}
}
}
}
pr=pr/count;
return(pr);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
bool m;
int bcount=0;
int scount=0;
double lots=0;
double sum=0;
double sumswap=0;
double ZeroLevelAll=0;
double tickvalue=MarketInfo(Symbol(),MODE_TICKVALUE);
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_BUY)
{
bcount++;
lots+=OrderLots();
sum+=OrderLots()*OrderOpenPrice();
sumswap+=OrderSwap()+OrderCommission();
if(bcount>scount && ZeroLevelAll<OrderOpenPrice())
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),ZeroLevelAll-BUPoint*Point,OrderTakeProfit(),0,Yellow);
return;
}
/*
if(bcount<scount)
{
if(OrderTakeProfit()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ZeroLevelAll,0,Yellow);
}
*/
}
if(OrderType()==OP_SELL)
{
scount++;
lots-=OrderLots();
sum-=OrderLots()*OrderOpenPrice();
sumswap+=OrderSwap()+OrderCommission();
if(bcount<scount && ZeroLevelAll<OrderOpenPrice())
{
if(OrderTakeProfit()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ZeroLevelAll-BUPoint*Point,0,Yellow);
return;
}
/*
if(bcount>scount)
{
if(OrderStopLoss()==0) m=OrderModify(OrderTicket(),OrderOpenPrice(),ZeroLevelAll,OrderTakeProfit(),0,Yellow);
}
*/
}
}
if(lots>0)
{
ZeroLevelAll=sum/lots -(sumswap/(tickvalue *(lots))*Point); //уровень безубытка для открытых ордеров, перевес Buy
}
if(lots<0)
{
ZeroLevelAll=sum/lots+(sumswap/(tickvalue *(lots))*Point); //уровень безубытка для открытых ордеров, перевес Sell
}
if(IsTesting())
{
int r=0;
if(OrdersTotal()<1)
{
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
r=OrderSend(Symbol(),OP_SELL,0.65,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
}
}
Comment("\n Sell Lots: ",SellLots(),
"\n Buy Lots: ",BuyLots(),
"\n Sell Pos: ",scount,
"\n Buy Pos: ",bcount,
"\n Lock Lot Buy: ",0.3*BuyLots()+BuyLots(),
"\n Lock Lot Sell: ",0.3*SellLots()+SellLots(),
"\n BU Buy: ",ZeroLevelAll-BUPoint*Point,
"\n BU Sell: ",ZeroLevelAll+BUPoint*Point,
"\n Profit: ",Profit());
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| LockInfo.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double BuyLots()
{
double lot=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) lot+=OrderLots();
}
}
}
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double SellLots()
{
double lot=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL) lot+=OrderLots();
}
}
}
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Profit()
{
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL || OrderType()==OP_BUY) pr+=OrderProfit()+OrderSwap()+OrderCommission();
}
}
}
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double SellPrice()
{
int count=0;
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_SELL)
{
pr+=OrderOpenPrice();
count++;
}
}
}
}
pr=pr/count;
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double BuyPrice()
{
int count=0;
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
pr+=OrderOpenPrice();
count++;
}
}
}
}
pr=pr/count;
return(pr);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(IsTesting())
{
int r=0;
if(OrdersTotal()<1)
{
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
//r=OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),5,0,0,"",0,0,Blue);
r=OrderSend(Symbol(),OP_SELL,0.65,NormalizeDouble(Bid,Digits),5,0,0,"",0,0,Red);
}
}
Comment("\n Sell Lots: ",SellLots(),
"\n Buy Lots: ",BuyLots(),
"\n Lock Lot Buy: ",0.3*BuyLots()+BuyLots(),
"\n Lock Lot Sell: ",0.3*SellLots()+SellLots(),
"\n Buy Price: ",BuyPrice(),
"\n Sell Price: ",SellPrice(),
"\n BU Buy: ",0.3*BuyLots()+BuyLots(),
"\n BU Sell: ",0.3*SellLots()+SellLots(),
"\n Profit: ",Profit());
}
//+------------------------------------------------------------------+
при выставлении BuySell=0 советник просто не будет сам открывать сделки?
Больше в советнике ничего менять не надо.
Андрей! торговая функция не предусматривает торговлю в оба направления?
да и потом если разворот тренда, то надо опять переключать вручную.
AM2