/*[[
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
"cannot be less"、これはもう基準そのものなのでしょうか?それとも、単なる定理の記述なのでしょうか?
要は、私が理解する限りでは、今回のケースには当てはまらないということです。この基準により、近似曲線に十分な多項式の次数を求めることができる。しかし、この曲線は軌跡を近似することになる。軌道の挙動を平滑化した形で再現するような多項式の次数を想像できますか?
:-)
メガリストにはありませんでした。
ロッシュ、目次をスキャンしてくれないか?ぜひ見てみたいですね。オゾンを通して送ってもらうとなると、時間がかかる。でも、もしかしたら近いうちに書評をやってくれるかもしれませんね。つまり、何があれば便利だと思いますか?
https://c.mql5.com/mql4/forum/2006/08/soderz.zip
一から五まで
https://c.mql5.com/mql4/forum/2006/08/soderz2.zip
6から9まで
私はMQL-IIを使用していますが、もしかしたら必要な方がいらっしゃるかもしれません。著者は載っていない、どこで手に入れたか覚えていない。
本書で述べられているポスチュレートには(掲載ページで見る限り)かなり深刻な不正確さがある(IMHO:プロセスの本質を見誤っている)。重要なのは、「価格は時間の関数ではない」ということです。なにしろ、それを確実に証明することは不可能なのだ。
私が説明したその文中では、価格がどのようなパラメータであるかの機能を確実に定義することは不可能であるという、そうした考察に基づいたアプローチです。もう一つの前提は、価格は外的要因の重ね合わせの関数であるということだ。私たちは価格の変化を近似的に捉え、それを時間の変化と関連づけようとしていますが、これは同じことではありません。つまり、時間は独立した(可変)変数ではなく、いくつかの要因に依存するのです。イベントが発生した瞬間のシステムのある内部時刻を意味する。このようなことを、外部からその座標系で観察している外部の観察者は、全く間違った結論を出してしまう。例えば、道路に立ち、左右どちらかの方向に通過した車の数を数えます。もちろん、ある情報をもとに、線路を通過する車の数が時間の関数であると言うことはできますが、果たしてそうでしょうか?私は特別に、不条理が明白な例を挙げました。ここではすべてがより複雑なのです。)
ウラジスラフさん、よろしくお願いします。
幸運と幸せなトレンドを