/*[[
VC-1hr
Lots := 0.1
Notes := Use in H1 timeframe.
Update on every tick := Yes
Enable Alerts := Yes
Disable alert once hit := No
Lots := 1
Stop Loss := 999
Take Profit := 200
Trailing Stop := 999
]]*/
// ====================================================================================================
// DECLARATION AND ASSIGNMENT
// ====================================================================================================
defines: Risk(1),mm(1),maxTradesPerPair(1);
Inputs : NumberName(1), iPeriod(21), MAShoot(50), DrawVertical(0), DrawText(0), ShowMA(0), LineWeight(1), BarsCount(0);
vars: spread(0),
Slippage(5),
sl(0),tp(0),
mode(0),
lastHigh(0),lastLow(0),lastOpen(0),lastClose(0),
target(0),
entryTS(0),
cnt(0),
first(0),
lotMM(0),
tHour(0),
CurrentTrades(0),
AccountIsMini(False); // See comments near assignment statement below.
Var : shift(0), n_begin(0), n_end(0), n(0), a_(0), b_(0), a1(0), a2(0), a3(0), b1(0);
var : y1(0), y2(0), price(0), BarBegin(100), BarEnd(1);
var : tmp_div_high(0), tmp_div_low(0), stddiv_low(0), stddiv_high(0), tmp_div(0);
var : x_n_up(0), x_n_down(0), x_1_up(0), x_1_down(0);
var : check_upper_chanel(false), color_1(0), color_2(0), name(""), angle(0), ratio(0), ratio_currency(0);
Var : MA(0), value(0), Bars_(170), check_low(false), check_high(false);
Var : save_low(0), save_high(0), save_shift_low(0), save_shift_high(0), save_shift(0);
Var : MAType(0), MAPrice(0);
//================================================================================================================
SetLoopCount(0);
comment("Auto Regression channel");
if BarsCount < 1 then Bars_ = Bars
else Bars_ = BarsCount;
save_low = -1;
save_high = -1;
save_shift_low = -1;
save_shift_high = -1;
check_low = false;
check_high = false;
MAType = MODE_SMA;
MAPrice = PRICE_CLOSE;
if Close[1] > 80 then ratio_currency = 100
else ratio_currency = 10000;
For shift = Bars_-1 Downto 0 Begin
MA = iMAEx(iPeriod, MAType, 0, MAPrice, shift);
if ShowMA then SetIndexValue(shift, MA);
if MA - MAShoot/ratio_currency > Close[shift] then
{
if Close[Shift] < save_low or save_low = -1 then
{
check_low = true;
save_low = close[Shift];
save_shift_low = shift;
};
};
if MA + MAShoot/ratio_currency< Close[shift] then
{
if save_high < Close[Shift] or save_high = -1 then
{
check_high = true;
save_high = close[Shift];
save_shift_high = shift;
};
};
if check_low then
{
if MA + MAShoot/ratio_currency < Close[shift] then
{
check_low = false;
save_low = -1;
};
};
if check_high then
{
if MA - MAShoot/ratio_currency > Close[shift] then
{
check_high = false;
save_high = -1;
};
};
End;
if save_shift_low > save_shift_high then
{
n_begin = save_shift_low;
n_end = save_shift_high;
}
else
{
n_begin = save_shift_high;
n_end = save_shift_low;
};
if n_end = 0 then n_end = 1;
n = (n_begin - n_end + 1);
a1 = 0;
a2 = 0;
a3 = 0;
b1 = 0;
a_ = 0;
b_ = 0;
y1 = 0;
y2 = 0;
tmp_div_high = 0;
tmp_div_low = 0;
tmp_div = 0;
if close[n_begin] < close[n_end] then check_upper_chanel = true
else check_upper_chanel = false;
For shift = n_begin Downto n_end Begin
if check_upper_chanel then price = low[shift]
else price = high[shift];
a1 = a1 + shift*price;
a2 = a2 + shift;
a3 = a3 + price;
b1 = b1 + shift*shift;
End;
b_ = (n*a1 - a2*a3)/(n*b1 - a2*a2);
a_ = (a3 - b_*a2)/n;
y1 = a_ + b_*n_begin;
y2 = a_ + b_*n_end;
MoveObject( "Regression_middle" + NumberName, OBJ_TRENDLINE, Time[n_begin], y1, Time[n_end], y2, yellow, LineWeight, STYLE_SOLID);
For shift = n_begin Downto n_end Begin
if check_upper_chanel then price = low[shift]
else price = high[shift];
tmp_div = tmp_div + (price - (a_ + b_*shift))*(price - (a_ + b_*shift));
End;
stddiv_low = sqrt(tmp_div/n);
stddiv_high = sqrt(tmp_div/n);
x_n_up = y1 + 2*stddiv_high;
x_1_up = y2 + 2*stddiv_high;
x_n_down = y1 - 2*stddiv_low;
x_1_down = y2 - 2*stddiv_low;
if check_upper_chanel then {
color_1 = blue;
color_2 = red;
}else{
color_1 = red;
color_2 = blue;
};
//upper
MoveObject( "Regression_upper" + NumberName, OBJ_TRENDLINE, Time[n_begin], x_n_up, Time[n_end], x_1_up, color_1, LineWeight, STYLE_SOLID);
//lower
MoveObject( "Regression_lower" + NumberName, OBJ_TRENDLINE, Time[n_begin], x_n_down, Time[n_end], x_1_down, color_2, LineWeight, STYLE_SOLID);
if DrawText then
{
name = "Regression_bars_begin" + NumberName;
MoveObject(name, OBJ_TEXT, Time[n_begin], x_n_down, Time[n_begin], x_n_down, red, 1, STYLE_SOLID);
SetObjectText(name, NumberToStr(n_begin,0), "System", 10, White);
name = "Regression_bars_end" + NumberName;
MoveObject(name, OBJ_TEXT, Time[n_end], x_1_up, Time[n_end], x_1_up, red, 1, STYLE_SOLID);
SetObjectText(name, NumberToStr(n_end,0), "System", 10, White);
}else{
DelObject("Regression_bars_end" + NumberName, 0, 0, 0, 0);
DelObject("Regression_bars_begin" + NumberName, 0, 0, 0, 0);
}
if DrawVertical then
{
MoveObject( "Regressin_begin" + NumberName, OBJ_VLINE, Time[n_begin], y1, Time[n_begin], y2, silver, 1, STYLE_DOT);
MoveObject( "Regressin_end" + NumberName, OBJ_VLINE, Time[n_end], y1, Time[n_end], y2, silver, 1, STYLE_DOT);
}else{
DelObject("Regressin_begin" + NumberName, 0, 0, 0, 0);
DelObject("Regressin_end" + NumberName, 0, 0, 0, 0);
}
//================================================================================================================
entryTS = 4 * Point; // Entry trailing stop - points
target = TakeProfit * Point; // Profit target - points
lastHigh = High[1]; // Last bar high
lastLow = Low[1]; // Last bar low
lastOpen = Open[1]; // Last bar open
lastClose = Close[1]; // Last bar close
spread = Ask - Bid; // Spread
// ====================================================================================================
// VALIDATION
// ====================================================================================================
if CurTime - LastTradeTime < 300 Then Exit;
if Bars < 100 or TakeProfit < 10 then Exit;
if IsIndirect(Symbol) = True then Exit;
if TrailingStop < 5 then
{
print("invalid Trailing Stop");
Exit;
};
// ====================================================================================================
// DATE CHOKE - For testing purposes
// ====================================================================================================
if TimeYear(time[0]) < 2004 then Exit;
// ====================================================================================================
// PYRAMIDING - LINEAR
// Money management risk exposure compounding
// ====================================================================================================
AccountIsMini = False; // Change to False for real trading w/ 100k/regular account
// or for all backtesting, since backtests allow
// fractional lots.
// Change to True for real trading w/ mini account
if mm <> 0 then
{
lotMM = Ceil(Balance * risk / 10000) / 10;
if lotMM < 0.1 then lotMM = lots;
if lotMM > 1 then lotMM = Ceil(lotMM);
if AccountIsMini then lotMM = lotMM * 10;
if lotMM > 100 then lotMM = 100;
}
else {
lotMM = Lots; // Change mm to 0 if you want the Lots parameter to be in effect
};
// ====================================================================================================
// OPEN ORDER CHECK -
// Each instance of a script is attached to one currency pair.
// When this check executes, it sets CurrentTrades to 1 so that
// only one trade for this symbol will be open, which is enforced
// by "if CurrentTrades = 0".
// ====================================================================================================
CurrentTrades = 0;
for cnt = 1 to TotalTrades
{
if OrderValue(cnt,VAL_SYMBOL) = Symbol then
{
CurrentTrades = CurrentTrades + 1;
};
};
// ====================================================================================================
// TRADE ENTRY
// ====================================================================================================
if CurrentTrades < maxTradesPerPair then
{
//LONG TRADES ENTRY CRITERIA
if //lastOpen < lastClose and // Last bar bullish, open less than close;
check_upper_chanel = true and // Ask above lastHigh, and SAR less than Ask,
y2 > Close and // then request order.
tHour != TimeHour(time[0]) then
{
tHour=TimeMinute(time[0]);
// Set stoploss to last bar low so that Bid must hit lastLow to exit.
sl = x_1_down - (2 * point);
tp = Ask + target;
SetOrder(OP_BUY,
lotMM,
Bid,
Slippage,
sl,
tp,
LIME);
Exit;
};
//SHORT TRADES ENTRY CRITERIA
if //lastOpen > lastClose and // Last bar bearish, open greater than close;
check_upper_chanel = False and // if Bid below lastLow, and SAR greater than Bid,
y2 < Close and // then request order.
tHour != TimeHour(time[0]) then
{
tHour=TimeMinute(time[0]);
// Set stoploss to last bar high so that Ask must hit lastHigh to exit.
sl = x_1_up + (2 * point);
tp = Bid - target;
SetOrder(OP_SELL,
lotMM,
Ask,
Slippage,
sl,
tp,
RED);
Exit;
};
}; // end of if CurrentTrades < maxTradesPerPair
// ====================================================================================================
// TRAILING STOP UPDATE
// ====================================================================================================
if CurrentTrades = 0 then exit;
for cnt = 1 to TotalTrades
{
if OrderValue(cnt,VAL_SYMBOL) = Symbol then
{
if OrderValue(cnt,VAL_TYPE) = OP_BUY then
{
// If Bid - Open is now higher than entryTS pips profit,
// and the stop loss order is lower than
// entryTS pips below the Bid, then adjust the stop loss part of
// the order to the Bid - entryTS pips
if (Bid - OrderValue(cnt,VAL_OPENPRICE)) > (entryTS) then
{
if OrderValue(cnt,VAL_STOPLOSS) < x_1_down then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
x_1_down - (2 * point),
OrderValue(cnt,VAL_TAKEPROFIT),
BLUE);
Exit;
};
};
// if Stop Loss > Open Price then Set Takeprofit
if OrderValue(cnt,VAL_STOPLOSS) >= OrderValue(cnt,VAL_OPENPRICE) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
OrderValue(cnt,VAL_STOPLOSS),
Ask + TakeProfit * Point,
BLUE);
Exit;
};
}; // end OP_BUY check
if OrderValue(cnt,VAL_TYPE) = OP_SELL then
{
// If Open - Ask is now higher than entryTS pips profit,
// and the stop loss order is higher than
// entryTS pips above the Ask, then adjust the stop loss part of
// the order to Ask + entryTS pips
if (OrderValue(cnt,VAL_OPENPRICE) - Ask) > (entryTS) then
{
if OrderValue(cnt,VAL_STOPLOSS) > x_1_up then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
x_1_up + (2 * point),
OrderValue(cnt,VAL_TAKEPROFIT),
BLUE);
Exit;
};
};
// if Stop Loss < Open Price then Set Takeprofit
if OrderValue(cnt,VAL_STOPLOSS) <= OrderValue(cnt,VAL_OPENPRICE) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
OrderValue(cnt,VAL_STOPLOSS),
Bid - TakeProfit * Point,
BLUE);
Exit;
};
}; // end OP_SELL check
}; // end Symbol check
}; // end for cnt=1 to TotalTrades
"不能少"--这已经是标准本身了吗?还是说这只是一个定理的陈述?
关键是,就我的理解,它并不适用于本案。该准则可用于寻找对近似曲线足够的多项式阶数。但是这条曲线将近似于轨迹。你能想象一个多项式的阶数,能以平滑的形式复制轨迹的行为吗?
:-)
我没有在巨型列表中找到任何东西。
Rosh,你能扫描一下目录吗?我很想看到它。要通过Ozone发送,需要很长的时间。但也许你可以在不久的将来对这本书做一个评论。也就是说,你认为什么才是有用的?
https://c.mql5.com/mql4/forum/2006/08/soderz.zip
从1到5
https://c.mql5.com/mql4/forum/2006/08/soderz2.zip
从6到9
我正在使用MQL-II,但也许有人会需要它。作者没有列出,我不记得我从哪里得到的。
书中所述的假设有一个相当严重的不准确之处(就我从出版的页面上看到的)(IMHO:对过程的本质有误解)。关键是,价格不是时间的函数。不管怎么说,要想确凿地证明这一点是不可能的。
在我所描述的那份声明中,该方法建立在这样的假设之上:不可能可靠地定义价格是什么参数的函数。另一个假设是,价格是外部因素叠加的一个函数。我们试图对价格的变化进行近似分析,并将其与时间的变化联系起来,这不是一回事。换句话说,时间不是一个独立(可变)变量,而是取决于几个因素。它意味着在事件发生的那一刻,系统的一些内部时间。一个外部观察者在其坐标系统中从外部观察这一切,可以得出绝对错误的结论。例如:我们站在一条路上,数着任何一个方向上经过的汽车数量。当然在一些信息的基础上,我们可以说轨道上通过的汽车数量是时间的函数,但事实如此吗?我特别举了一个例子,其荒谬性是显而易见的。这里的一切都比较复杂;)。
问候,弗拉迪斯拉夫。
好运和快乐的趋势。