Добавим функцию Мартингейла к советнику. |
//+------------------------------------------------------------------+
//| WellX.mq4 |
//| Copyright © 2011, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2"
#property link "http://www.forexsystems.biz"
#define MAGIC 20111010
extern double StopLoss = 400;
extern double TakeProfit = 800;
extern double ADXPeriod = 14;
extern double BBPeriod = 20;
extern double BBDev = 2;
extern int Level = 30;
extern double Lots = 1;
bool b=true, s=true;
//+------------------------------------------------------------------+
int start()
{
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//----
int p=0;
//---- get Indicatorrs
double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
double adx=iADX(NULL,0,ADXPeriod,PRICE_CLOSE,MODE_MAIN,0);
//----
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
}
}
//---- buy
if(adx<Level && Ask<bbl && b && p<1)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);
b=false;
s=true;
}
//---- sell
if(adx<Level && Bid>bbh && s && p<1)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red );
b=true;
s=false;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int LossCount = 0;
double LotsArray[]={0.1,0.2,0.4,0.8,1.6,3.2};
...
double Lots()
{
double Lot = Lots;
int total = OrdersHistoryTotal();
for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
{
if (OrderProfit() > 0)
{
Lot=LotsArray[0];
LossCount = 0;
}
else
{
Lot=LotsArray[LossCount+1];
LossCount++;
}
}
}
return(Lot);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| WellX.mq4 |
//| Copyright © 2011, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2"
#property link "http://www.forexsystems.biz"
#define MAGIC 20111010
extern double StopLoss = 400;
extern double TakeProfit = 800;
extern double ADXPeriod = 14;
extern double BBPeriod = 20;
extern double BBDev = 2;
extern int Level = 30;
extern double Lots = 0.1;
int LossCount = 0;
double LotsArray[]={0.1,0.2,0.4,0.8,1.6,3.2};
bool b=true, s=true;
//+------------------------------------------------------------------+
int start()
{
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//----
int p=0;
//---- get Indicatorrs
double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
double adx=iADX(NULL,0,ADXPeriod,PRICE_CLOSE,MODE_MAIN,0);
//----
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
}
}
//---- buy
if(adx<Level && Ask<bbl && b && p<1)
{
OrderSend(Symbol(),OP_BUY,Lots(),Ask,30,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);
b=false;
s=true;
}
//---- sell
if(adx<Level && Bid>bbh && s && p<1)
{
OrderSend(Symbol(),OP_SELL,Lots(),Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red );
b=true;
s=false;
}
//----
return(0);
}
//+------------------------------------------------------------------+
double Lots()
{
double Lot = Lots;
int total = OrdersHistoryTotal();
for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
{
if (OrderProfit() > 0)
{
Lot=LotsArray[0];
LossCount = 0;
}
else
{
Lot=LotsArray[LossCount+1];
LossCount++;
}
}
}
return(Lot);
}
//+------------------------------------------------------------------+
Предыдущая запись в
группе Эффективное использование MagicNumber ордеров для упрощения анализа при торговле советниками. |
|
10 октября 2011
|
24 октября 2011
|
Комментарии (25)
9 amyrgan145 Сообщений: 428 - Амыр
15 div15 Сообщений: 71 - div15
35 AM2 Автор Сообщений: 16419 - Андрей
15 div15 Сообщений: 71 - div15
35 AM2 Автор Сообщений: 16419 - Андрей
15 div15 Сообщений: 71 - div15
double LotsArray[]={0.1,0.2,0.4,0.8,1.6,3.2};
Т.е. задать типа: LotsArray[] =(a1,a2,a3,.....a4,a5);
все параметры a1,a2,a3,.....a4,a5 вынести во внешнюю переменную.
0 hoz Сообщений: 9
35 AM2 Автор Сообщений: 16419 - Андрей
0 hoz Сообщений: 9
0 pepell84 Сообщений: 1
35 AM2 Автор Сообщений: 16419 - Андрей
15 div15 Сообщений: 71 - div15
//--------------------------------------------------------------------
//------------ФУНКЦИЯ МАРТИНГЕЙЛА-------------------------------------
//--------------------------------------------------------------------
double Lots()//Lots() ЭТО ВСТАВЛЯЕМ ВМЕСТО ЛОТА
{
double lot = Lots;
int total = OrdersHistoryTotal();
for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderProfit() > 0)
{
lot = Lots;
}
else
{
lot = lot * LotExponent;
}
}
}
return(lot);
}
15 div15 Сообщений: 71 - div15
2 laban Сообщений: 16
35 AM2 Автор Сообщений: 16419 - Андрей
0 Designer63rus Сообщений: 3
35 AM2 Автор Сообщений: 16419 - Андрей
0 OLEG2017 Сообщений: 4
0 Designer63rus Сообщений: 3
Просто нужно понимать что делаешь. У функции есть внешние входные переменные.
35 AM2 Автор Сообщений: 16419 - Андрей
extern string Nastroiki ="== Настройки советника ==";
extern double Lots = 50;
extern string Expiration = «5»;
extern int Slippage = 5;
extern int Magic = 12345;
extern double LotExponent = 2;
extern double MaxLot = 10000;
extern double KLot = 50;
double lot;
double OPEN1;
double CLOSE1;
double LOW1;
double HIGH1;
double OPEN2;
double CLOSE2;
double LOW2;
double HIGH2;
double OPEN3;
double CLOSE3;
double LOW3;
double HIGH3;
//----------------------------------------
Здесь расчет
//----------------------------------------
double Lot()
{
if(OrdersHistoryTotal()==0)
{
lot=Lots;
}
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()>0)
{
lot=Lots;
}
if(OrderProfit()<=0)
{
lot=OrderLots()*KLot;
}
}
if(lot>MaxLot)lot=MaxLot;
return(lot);
}
//+------------------------------------------------------------------+
1 Petrov210217 Сообщений: 1
9 maksGruv Сообщений: 340
0 Alexws Сообщений: 1
16 cerber04 Сообщений: 409
1 Sel7 Сообщений: 3
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий