стохастик...нет сил уже биться

 

Уже голову сломал...как прописать условие, если стохастик пересекает уровень(к примеру 20) с низу вверх, то покупка, если пересекает с верху вниз уровень(к примеру 80)- то продажа...думаю это не так сложно, просто ни как допетрить немогу.Если if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1)>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAINL,2))...то все равно не выходит (периодН4).

Заранее благодарен. 

 

На бумаге может стоит написать индексы? и нарисовать что хочется

... 4 3 2 1 0

На нулевом оказался ниже 20

на 1-м был выше 20

на 2-м был выше 1-ого

Как-то так 

 
jartmailru:

На бумаге может стоит написать индексы? и нарисовать что хочется

По началу на бумаге однозначно полезно. Сам так делал.

"... если стохастик пересекает уровень(к примеру 20) с низу вверх..."

if (iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1)>20 && iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAINL,2))<=20) {...}

 
vladimir64:

Уже голову сломал...как прописать условие, если стохастик пересекает уровень(к примеру 20) с низу вверх, то покупка, если пересекает с верху вниз уровень(к примеру 80)- то продажа...думаю это не так сложно, просто ни как допетрить немогу.Если if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1)>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAINL,2))...то все равно не выходит (периодН4).

Заранее благодарен.


Я тоже пережил такое. Расскажу словами, а напишете самостоятельно.

Берем за основу ту линию, которая пересекает нужный Вам уровень.

Если она меньше уровня - значит пересекла сверху-вниз. И наоборот, как только числовое значение линии стало больше значения уровня, значит пересекла снизу вверх. Нужно будет добавить какой-либо флаг - чтобы не повторялось выполнение определенных операций по открытию-закрытию сделок. Вот, к примеру для наглядности цитата из моего первого мультивалютного эксперта. Он рассматривает 5 линий ЕМА. Если одна из них пересекает све остальные снизу вверх, то ждем пересечения ЕМА4 и ЕМА10. Вместо "i" поставьте "0". Затем по коду открываем и закрываем ордера:

// Торговые критерии
//Отслеживаем график
close=Close[i];
// по ЕМА ------------------------------------------------------------------
MA4=iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,i);
MA10=iMA(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i);
MA25=iMA(NULL,0,25,0,MODE_EMA,PRICE_CLOSE,i);
MA40=iMA(NULL,0,40,0,MODE_EMA,PRICE_CLOSE,i);
MA50=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,i);
//--------------------------------------------------- Вход и выход из сделки

//------------------------------------------------------- Продаем и покупаем

if (MA25<MA50 && MA4_MA10==NULL && razvorot_25_50==true)
//!!!!!!!!!!!!!!BAY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{ //Alert("BAY=",BayTrading," SELL=",SellTrading)
razvorot_25_50=false;
priznak_25_50=true;
if (MA4>MA10)
{
MA4_MA10=true;
}
if (MA4<MA10)
{
MA4_MA10=false;
}
//Alert("MA25<MA50 ",MA25,"<",MA50," MA4_MA10 ",MA4_MA10);
}
if (MA25>MA50 && MA4_MA10==NULL && razvorot_25_50==false)
//!!!!!!!!!!!!!!BAY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{ //Alert("BAY=",BayTrading," SELL=",SellTrading)
razvorot_25_50=true;
priznak_25_50=true;
if (MA4>MA10)
{
MA4_MA10=true;
}
if (MA4<MA10)
{
MA4_MA10=false;
}

}

if (MA4<MA10 && MA4_MA10==true && priznak_25_50==true )
{

priznak_25_50=false;
MA4_MA10=NULL;

}
if (MA4>MA10 && MA4_MA10==false && priznak_25_50==true )
{

razvorot_4_10=true;
priznak_4_10=true;
priznak_25_50=false;
MA4_MA10=NULL;

}


if (MA4>MA10 && priznak_4_10==true && priznak_25_50==false && Opn_S==false)
//!!!!!!!!!!!!!!SELL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{

Cls_B = true;
Opn_S=true;
Cls_S = false;
Opn_B=false;
priznak_4_10=false;
}

if (MA4<MA10 && priznak_4_10==true && priznak_25_50==false && Opn_B==false)
//!!!!!!!!!!!!!!BUY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
Cls_S = true;
Opn_B=true;
Cls_B = false;
Opn_S=false;
priznak_4_10=false;
}

//Зарытие - открытие ордеров

 
new-rena:


Я тоже пережил такое. Расскажу словами, а напишете самостоятельно.

Берем за основу ту линию, которая пересекает нужный Вам уровень.

Если она меньше уровня - значит пересекла сверху-вниз. И наоборот, как только числовое значение линии стало больше значения уровня, значит пересекла снизу вверх. Нужно будет добавить какой-либо флаг - чтобы не повторялось выполнение определенных операций по открытию-закрытию сделок. Вот, к примеру для наглядности цитата из моего первого мультивалютного эксперта. Он рассматривает 5 линий ЕМА. Если одна из них пересекает све остальные снизу вверх, то ждем пересечения ЕМА4 и ЕМА10. Вместо "i" поставьте "0". Затем по коду открываем и закрываем ордера:

// Торговые критерии
//Отслеживаем график
close=Close[i];
// по ЕМА ------------------------------------------------------------------
MA4=iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,i);
MA10=iMA(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i);
MA25=iMA(NULL,0,25,0,MODE_EMA,PRICE_CLOSE,i);
MA40=iMA(NULL,0,40,0,MODE_EMA,PRICE_CLOSE,i);
MA50=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,i);
//--------------------------------------------------- Вход и выход из сделки

//------------------------------------------------------- Продаем и покупаем

if (MA25<MA50 && MA4_MA10==NULL && razvorot_25_50==true)
//!!!!!!!!!!!!!!BAY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{ //Alert("BAY=",BayTrading," SELL=",SellTrading)
razvorot_25_50=false;
priznak_25_50=true;
if (MA4>MA10)
{
MA4_MA10=true;
}
if (MA4<MA10)
{
MA4_MA10=false;
}
//Alert("MA25<MA50 ",MA25,"<",MA50," MA4_MA10 ",MA4_MA10);
}
if (MA25>MA50 && MA4_MA10==NULL && razvorot_25_50==false)
//!!!!!!!!!!!!!!BAY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{ //Alert("BAY=",BayTrading," SELL=",SellTrading)
razvorot_25_50=true;
priznak_25_50=true;
if (MA4>MA10)
{
MA4_MA10=true;
}
if (MA4<MA10)
{
MA4_MA10=false;
}

}

if (MA4<MA10 && MA4_MA10==true && priznak_25_50==true )
{

priznak_25_50=false;
MA4_MA10=NULL;

}
if (MA4>MA10 && MA4_MA10==false && priznak_25_50==true )
{

razvorot_4_10=true;
priznak_4_10=true;
priznak_25_50=false;
MA4_MA10=NULL;

}


if (MA4>MA10 && priznak_4_10==true && priznak_25_50==false && Opn_S==false)
//!!!!!!!!!!!!!!SELL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{

Cls_B = true;
Opn_S=true;
Cls_S = false;
Opn_B=false;
priznak_4_10=false;
}

if (MA4<MA10 && priznak_4_10==true && priznak_25_50==false && Opn_B==false)
//!!!!!!!!!!!!!!BUY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
Cls_S = true;
Opn_B=true;
Cls_B = false;
Opn_S=false;
priznak_4_10=false;
}

//Зарытие - открытие ордеров


Дааа...видимо я еще не дозрел до этого....,все равно не понял. Просто как я не пытался, все равно не выходит....черт, свихнусь скоро...мне пример нужен наглядный!!!
 

Полезеней будет ввести еще два контрольных уровня (Из своего опыта). Например если стохастик меньше 10 то переменная ОКBUY=1, а при достижении больше 20 и OKBUY=1 идет покупка (После покупки естественно OKBUY обнуляем). С селами наоборот если стохастик больше 90 то OKSELL=1, а при достижении меньше 80 и OKSELL=1 идет продажа. Кстати контрольные уровни можно оптимизировать потом. А без них, он у вас будет кучу сделок совершать пока болтаться будет около 20 или 80.

Причина обращения: