Тралит всю серию по типу ордера: www.opentraders.ru/downloads/1492/
if(OrderSelect(1,SELECT_BY_POS,MODE_TRADES))
bool cl=true;
double pAsk;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
pAsk=MarketInfo(OrderSymbol(),MODE_ASK);
if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),lot,fND(pAsk),Slip,Red);
}
}
}
input double Lots=0.01;
void CloseOrder(double lot)
{
//...
}
if(CountTrades()>2) CloseOrder(Lots);
//+------------------------------------------------------------------+
//| DateLot.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
input int Days=15;
input double Lot=0.1;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double DaysProfit(datetime date=0)
{
double profit=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2)
{
if(date<OrderCloseTime()) profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
return(profit);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double dprofit=DaysProfit(TimeCurrent()-3600*24*Days);
double pr=NormalizeDouble(dprofit*100/AccountBalance(),2);
double lot=Lot+(pr*Lot)/100;
Comment("\n Profit: ",dprofit,
"\n Procent Profit: ",pr,
"\n Lot: ",Lot,
"\n New Lot: ",lot);
}
//+------------------------------------------------------------------+
С этим лотом советник торгует день (неделю, месяц выбирается пользователем)
//+------------------------------------------------------------------+
//| DateLot.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
input string Date="12.01.2016";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double GetProfitFromDate(datetime date=0)
{
double profit=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2)
{
if(date<OrderCloseTime()) profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
return(profit);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Comment("\n Profit: ",GetProfitFromDate(StringToTime(Date)));
}
//+------------------------------------------------------------------+
Могу сделать только максимально упрощенный вариант.
AM2