Владимир писал(а):Как обойти ограничения.
Возможно, в вашем индикаторе можно сместить точку входа на 1 бар назад, изменив код, т.к. получается у Вас текущий бар влияния не оказывает никакого?!
Владимир писал(а):Как обойти ограничения.
Код: Выделить всё
for (var x= Scan-1; x>0; x--)
{
///// При нормальных свечах
if (Input.Open[x]<Input.Close[x]) // Проверяем закрытие свечи лонг шорт
{// Лонг
if (High<Input.Close[x])
{ // Считаем, что произошло обновление High. Поэтому переписываея значения хая и лоу
IzNapr=1; //лонг
High=Input.High[x];
Low=Input.Low[x];
Xx=x; // Сохраняем значение для построения канала
HighX=High; // Сохраняем значение хая в памяти
XHighN=x; // Сохраняем значение в памяти
}
}
else
{// Шорт
if (Low>Input.Close[x])
{ // Считаем, что произошло обновление low. Поэтому переписываея значения хая и лоу
IzNapr=2; //шорт
High=Input.High[x];
Low=Input.Low[x];
Xx=x; // Сохраняем значение для построения канала
LowX=Low; // Сохраняем значение лоу в памяти
XLowN=x; // Сохраняем значение в памяти
}
}
///// При формировании свечей с гепами
if (Input.Open[x]>Input.Close[x]) //Проверяем закрытие свечи лонг шорт
{// Лонг
if (High<Input.Open[x])
{ // Считаем, что произошло обновление High. Поэтому переписываея значения хая и лоу
IzNapr=1; //лонг
High=Input.High[x];
Low=Input.Low[x];
Xx=x; //Сохраняем значение для построения канала
HighX=High; //Сохраняем значение хая в памяти
XHighN=x; //Сохраняем значение в памяти
}
}
else
{// Шорт
if (Low>Input.Open[x])
{ // Считаем, что произошло обновление low. Поэтому переписываея значения хая и лоу
IzNapr=2; //шорт
High=Input.High[x];
Low=Input.Low[x];
Xx=x; //Сохраняем значение для построения канала
LowX=Low; //Сохраняем значение лоу в памяти
XLowN=x; //Сохраняем значение в памяти
}
}
// Заполняем буфер хаёв
if (IzNapr==NaprHelp && IzNapr==2) // Смена направления с лонга в шорт
{
for (var ch=ExstremaNumber-1; ch>0; ch--)
{
Buf_High[ch]=Buf_High[ch-1];
Buf_time_High[ch]=Buf_time_High[ch-1];
}
Buf_High[0]=HighX;
Buf_time_High[0]=XHighN;
NaprHelp=1;
}
// Заполняем буфер лоёв
if (IzNapr==NaprHelp && IzNapr==1) // Смена направления с шорта в лонг
{
for (var Lo=ExstremaNumber-1; Lo>0; Lo--)
{
Buf_Low[Lo]=Buf_Low[Lo-1];
Buf_time_Low[Lo]=Buf_time_Low[Lo-1];
}
Buf_Low[0]=LowX;
Buf_time_Low[0]=XLowN;
NaprHelp=2;
}
// Строим канал внешней свечи, для выделения внутренних свечей
ChLow[Xx]= Low;
ChLow[0]= Low;
ChHigh[Xx]= High;
ChHigh[0]= High;
ChLow.DrawChannel(ChHigh);
////////
} // Закрытие цикла for
Владимир писал(а): В индикаторе свечка последняя при изменении вызывает Evaluate() индикатора и за 1 свечку сигнал Ваш может 10 раз появится и 10 раз исчезнуть.
Владимир писал(а):Евгений я долго думал над вашей фразой и не могу понять как может произойти за одну свечку, изменение сигнала в индикаторе:
Владимир писал(а):1. В индикаторах можно использовать только дискретные значения, то есть значения только сформированных свечей (открытие, закрытия, хай и лоу бара) ;
Владимир писал(а):2. Получение текущей цены и лучшей цены из стакана невозможно напрямую в индикаторе!
Владимир писал(а):3. Передача значений текущей цены и лучшей цены из стакана из робота в индикатор просто невозможна функция OnUpdate() это сделать не даст.
Владимир писал(а):Из выше перечисленного получить изменение сигнала с индикатора просто технически невозможно!!!
Поэтому хотелось бы получить примеры для анализа, может нам чего то недоговаривают и данные модно получать как и открывать позицию в любой момент и не ждать начала открытия нового бара тем самым повысить эффективность торговли?
Evaluate() для последней свечи в индикаторах вызывается неоднократно, происходит это при изменении цены. Можете проверить.
2017.02.24 16:30:30.844 NaprTrenda - 1PowerTrenda - 70,5426356589195// StopExst - 2094,8
2017.02.24 16:30:30.991 -1- high[0] 2096,7 > high[1] 2095,5// low[0] 2094,8> low[1] 2090,25
2017.02.24 16:30:30.991 NaprTrenda - 1PowerTrenda - 70,5426356589195// StopExst - 2094,8
2017.02.24 16:30:31.357 -1- high[0] 2096,7 > high[1] 2095,5// low[0] 2094,8> low[1] 2090,25
2017.02.24 16:30:31.616 -1- high[0] 2096,7 > high[1] 2095,5// low[0] 2094,8> low[1] 2090,25
2017.02.24 16:30:43.282 -1- high[0] 2096,7 > high[1] 2095,5// low[0] 2094,8> low[1] 2090,25
2017.02.24 16:30:45.457 -1- high[0] 2096,7 > high[1] 2095,5// low[0] 2094,8> low[1] 2090,25
2017.02.24 16:30:48.427 -1- high[0] 2096,7 > high[1] 2095,5// low[0] 2094,8> low[1] 2090,25
2017.02.24 16:30:51.904 -1- high[0] 2096,7 > high[1] 2095,5// low[0] 2094,8> low[1] 2090,25
Код: Выделить всё
//это в роботах многие используют, но всё равно спасибо за напоминание данных методов
EnterLongLimit(GetBid()+ 5* GetPriceStep());
EnterShortLimit(GetAsk()+ 5* GetPriceStep());
Владимир писал(а):
1. В индикаторах можно использовать только дискретные значения, то есть значения только сформированных свечей (открытие, закрытия, хай и лоу бара) ;
evge
Evaluate() для последней свечи в индикаторах вызывается неоднократно, происходит это при изменении цены. Можете проверить.
evge писал(а):функций обработки текущих данных нет в индикаторе только сформированных свечей (открытие, закрытия, хай и лоу бара), если вы их приведете то спорить не буду.
Код: Выделить всё
function Initialize()
{
IndicatorName = "CloseLevel";
PriceStudy = true;
AddSeries("Price", DrawAs.Custom, Color.Red);
AddInput("Input", Inputs.Price);
AddLevel(0, Color.Red, "Price");
}
function Evaluate()
{
Levels[0].Level = Input.Close[0];
}
Код: Выделить всё
if (CurrentIndex == MaxIndex) Levels[0].Level = Input.Close[0];
evge писал(а):Input.Close[0]
Input.High[0]
Input.Low[0]
evge писал(а):Ну почему же, вызывайте если так необходимо нужный индикатор и передавайте в качестве параметров нужные вам цены из стакана: GetLast(), GetBid(), GetAsk().
Вернуться в «Общие вопросы по разработке»
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя