Код: Выделить всё
/**
Инвестиционная стратегия.
При старте покупает по текущим ценам начальный объем qStart.
Докупает на Q при снижении цены, не более позиции робота и не ниже порога (cmin).
Продает докупленное кол-во при росте цены выше цены начальной покупки.
Если Poor не равен 0, докупка закрывается частями по цене выше чем последняя цена на дельту.
Продает весь объем при росте цены выше целевой цены и останавливается
Algorithm = ИНВЕСТИЦИИ;**/
function Initialize()
{
StrategyName = "InvestPozitive 2MA";
AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Pfast"}});
AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Pslow"}});
AddParameter("Pfast", 7, "быстрая ema", 1);
AddParameter("Pslow", 14, "медленная ema", 0)
AddParameter("OnPrice", 250, "Стартовая цена (начать торговлю при пересечении цены)", 0);
AddParameter("qStart", 1000, "Сколько купить при старте", 0);
AddParameter("cmax", 160, "Целевая цена", 0);
AddParameter("cmin", 60, "Нижний порог покупки", 0);
AddParameter("Q", 10, "Шаг покупки в штуках", 0);
AddParameter("Poor", 0, "Закрывать докупки частями, если значение не 0", 0);
AddInput("Input1", Inputs.Candle, 1, true, "");
AddGlobalVariable("LastPrice", Types.Double, 100000000000);
AddGlobalVariable("FirstPrice", Types.Double, 0);
AddGlobalVariable("DeltaPrice", Types.Double, 0);
AddGlobalVariable("Started", Types.Boolean, false);
}
function OnUpdate()
{
// В момент запуска покупаем qStart акций
// Основная прибыль: продаем qStart акций по цели (cmax)
// Дополнительна: ниже цены старта покупаем (но не ниже cmin), выше продаем
double c = Input1.Close[0];
double pos = CurrentPosition();
double qStep;
if (!Started) Started = (Input1.Close[0] <= OnPrice && Input1.Close[1] > OnPrice) || (Input1.Close[0] >= OnPrice && Input1.Close[1] < OnPrice);
if (!Started) return;
// Правило 1: Открытие позиции на начальный объем
// и расчет DeltaPrice
if ( (EMA(Input1.Close, Pfast) > EMA(Input1.Close, Pslow)) && (Pfast < Pslow) )
{
if ( (LastPrice == 100000000000) )
{
// Проверки
if (Q <= 0)
{
ShowMessage("Не задано Q - шаг количества");
Stop();
}
if ( cmin >= cmax )
{
ShowMessage("cmin больше, чем cmax ");
Stop();
}
// Открываем позицию, если стартовое кол-во больше 0
if (qStart > 0)
EnterLong(qStart);
LastPrice = c;
FirstPrice = c;
// Расчитываем дельту цены для докупки
if (Q > 0 )
{
qStep = (LongLimit - qStart) / Q ;
DeltaPrice = (LastPrice - cmin) / qStep;
}
}
// Правило 2: Закрытие всей позиции при достижении сmax
if ( c > cmax)
{
CloseLong();
ShowMessage("Цена достигла цели, робот закрывает позицию и будет остановлен");
Stop();
// Остановка робота
}
// Правило 3: Добавление к позиции при падении
if ( c < LastPrice - DeltaPrice && c > cmin )
{
EnterLong(Q);
LastPrice = c;
}
// Правило 4: Продажа докупки росте цены выше стартовой цены
if ( c > FirstPrice && pos > qStart)
{
CloseLong(pos - qStart);
LastPrice = c;
}
// Правило 5: Закрытие докупленной части позиции при росте выше последней цены на deltaPrice
if ( Poor != 0 && c > LastPrice + DeltaPrice && pos > qStart)
{
CloseLong(Q);
LastPrice = c;
}
}
Подскажите почему компиляцию перестал проходить? Что то где то намудрил