//+------------------------------------------------------------------+
//| NampinGale.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright "脱サラトレーダー"
#property link "http://ameblo.jp/metatrader-auto/"
extern double Lots = 0.01; //ロット数
extern double LotMultiple = 2; //ナンピンロット倍数
extern double SpacePips = 10; //ナンピン幅(ピプス)
extern int MaxPositions = 5; //最大ポジション数
extern double TargetProfit = 10; //利食い額
extern double LossCut = 200; //損切り額 0の場合損切りなし
extern double Slippage = 3; //スリッページ
extern int MagicNumber = 12345; //マジックナンバー
double _point;
int lot_digit;
double maxlot;
double minlot;
bool close_mode_buy;
bool close_mode_sell;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
_point = Point;
if (Digits == 3 || Digits == 5)
{
_point *= 10;
Slippage *= 10;
}
double lot_step = MarketInfo(Symbol(), MODE_LOTSTEP);
if (lot_step < 0.0001) lot_digit = 5;
else if(lot_step < 0.001) lot_digit = 4;
else if(lot_step < 0.01) lot_digit = 3;
else if(lot_step < 0.1) lot_digit = 2;
else if(lot_step < 1) lot_digit = 1;
else lot_digit = 0;
maxlot = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), lot_digit);
minlot = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), lot_digit);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
//ポジションの情報を取得する
int pos_cnt_buy = 0;
int pos_cnt_sell = 0;
double profit_buy = 0;
double profit_sell = 0;
double lowest_buy = -1;
double highest_sell = -1;
double lastlots_buy;
double lastlots_sell;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == OP_BUY)
{
pos_cnt_buy++;
profit_buy += OrderProfit() + OrderSwap() + OrderCommission();
if(lowest_buy < 0 || lowest_buy > OrderOpenPrice())
{
lowest_buy = OrderOpenPrice();
lastlots_buy = OrderLots();
}
}
else if(OrderType() == OP_SELL)
{
pos_cnt_sell++;
profit_sell += OrderProfit() + OrderSwap() + OrderCommission();
if(highest_sell < 0 || highest_sell < OrderOpenPrice())
{
highest_sell = OrderOpenPrice();
lastlots_sell = OrderLots();
}
}
}
//決済::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//買いポジ
if(pos_cnt_buy > 0)
{
if(profit_buy >= TargetProfit || (LossCut>0 && profit_buy <= -LossCut) || close_mode_buy)
{
if(CloseAll(OP_BUY))
{
pos_cnt_buy = 0;
close_mode_buy = false;
}
else
{
close_mode_buy = true;
return(0);
}
}
}
else close_mode_buy = false;
//売りポジ
if(pos_cnt_sell > 0)
{
if(profit_sell >= TargetProfit || (LossCut>0 && profit_sell <= -LossCut) || close_mode_sell)
{
if(CloseAll(OP_SELL))
{
pos_cnt_sell = 0;
close_mode_sell = false;
}
else
{
close_mode_sell = true;
return(0);
}
}
}
else close_mode_sell = false;
//Entry::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
double lots;
//ナンピン
//買い
if(pos_cnt_buy > 0 && pos_cnt_buy < MaxPositions)
{
if(Ask <= lowest_buy - SpacePips * _point)
{
lots = NormalizeDouble(lastlots_buy * LotMultiple, lot_digit);
if(lots < minlot) lots = minlot;
if(lots > maxlot) lots = maxlot;
OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,0,0,"buy",MagicNumber,0,Blue);
}
}
//売り
if(pos_cnt_sell > 0 && pos_cnt_sell < MaxPositions)
{
if(Bid >= highest_sell + SpacePips * _point)
{
lots = NormalizeDouble(lastlots_sell * LotMultiple, lot_digit);
if(lots < minlot) lots = minlot;
if(lots > maxlot) lots = maxlot;
OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,0,0,"sell",MagicNumber,0,Red);
}
}
//売買シグナル
int sign=0;
//買いsign 1 売りsign -1
if(Hour() % 2 == 0) sign = 1;
else sign = -1;
//買い条件・買い注文
if(pos_cnt_buy == 0)
{
if(sign == 1) OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"buy",MagicNumber,0,Blue);
}
//売り条件・売り注文
if(pos_cnt_sell == 0)
{
if(sign==-1) OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"sell",MagicNumber,0,Red);
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool CloseAll(int type)
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS)) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() != type) continue;
if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage))
{
Print("Close Error");
return(false);
}
}
return(true);
}