Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladimir64
41
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).

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

Андрей
1890
Андрей  

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

... 4 3 2 1 0

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

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

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

Как-то так 

Vlad
512
Vlad  
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) {...}

new-rena
3372
new-rena  
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;
}

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

Vladimir64
41
Vladimir64  
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;
}

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


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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий