GOLD-Cтpaтeгия пoвтopeния пoкa ... не очень
2026-05-07 23:29:11
Прочитали smart-lab.ru/blog/1300862.php и решили не поверить на слово.
Поскольку индекс IMOEX неторгуемая «фишка», скачали часовики IMOEXF с финама и написали скрипт WealthLab. Т.к. график IMOEX индицируется только до 19:00, то направление позиции определяем на часовиках IMOEXF по Close бара, начинающегося в 18:00 (т.е. по цене в 19:00).
namespace WealthLab.StrategiesС начала марта по вчера получилась такая картинка
{
public class GOLDoneDayTrend : WealthScript {
Position pos;
protected override void Execute() {
Prepare();
int preBar = pos.EntryBar;
for (int bar = preBar+1; bar < Bars.Count-1; ++bar) {
if (Date[bar].Hour != 18) continue;
if (Close[bar] > Close[preBar] &&
pos.PositionType != PositionType.Long) {
ExitAtClose (bar, pos);
pos = BuyAtClose (bar);
} else
if (Close[bar] < Close[preBar] &&
pos.PositionType != PositionType.Short) {
ExitAtClose (bar, pos);
pos = ShortAtClose (bar);
}
preBar = bar;
}
if (IsLastPositionActive)
ExitAtClose (Bars. Count-1, LastPosition);
} // Execute()
void Prepare() {
ClearDebug(); PrintDebug (Bars.Symbol);
if (! Bars.IsIntraday || Bars.BarInterval != 60)
throw new Exception ("Hourly only.");
int preBar = -1; int bar1 = -1; int bar2 = -1;
for (int bar = 0; bar < Bars.Count; ++bar) {
if (Date[bar].Hour == 18) {
if (preBar < 0) {
SetBackgroundColor (bar, Color.Yellow);
bar1 = bar;
} else {
if (Close[bar] > Close[preBar])
SetBackgroundColor (bar, Color.LightGreen);
else
SetBackgroundColor (bar, Color.Pink);
if (preBar > 0)
DrawLine (PricePane, preBar, Close[preBar]
,bar, Close[bar], Color.Black, LineStyle.Solid, 1);
if (bar2 < 0) bar2 = bar;
}
preBar = bar;
} // if (Date[bar].Hour
} // for (int bar = 0
PrintDebug (bar1 + " " + bar2);
pos = Close[bar2] >= Close[bar1]
? BuyAtClose (bar2) : ShortAtClose (bar2);
} // Prepare()
} // class GOLDoneDayTrend
} // namespace WealthLab.Strategies

Для большей наглядности

Будьте бдительны. Не поддавайтесь мошенникам на Смарт-лабе, которые могут втравить вас в убытки.
PS С-Л как всегда не может обойтись, чтобы не напакостить. Последние две строки в Execute() должны быть
if (IsLastPositionActive)
ExitAtClose (Bars.Count-1, LastPosition);
…
Подробнее https://smart-lab....