Помогите написать кусок советника

 

У меня не получается привязать цену к линии МА и сюда же МАКД

Условие покупки:

Ордер открывается на рост, если

1. На МАКДе снизу-вверх было пересечение нулевого уровня

2.  Цена находится на расстоянии N пунктов выше или ниже от линии МА. Если к примеру N=10, то в этом диапазоне 20 пипсов ордер открывается. А если цена была к примеру на 15 пипсов выше или ниже, то ждемс дальше. Чтобы все было более понятно, я прикрепил картинку

2 красные точки на картинке - точки входа. Вот что я имел ввиду под переменной N

Файлы:
pcfljgmq.rar  15 kb
 

В перемнные вносим значения MACD на трёх последних свечках - это позволит отследить точку пересечения. Если при этом цена выше/ниже скользящей, то нужно вычислить на сколько пунктов. Если пересечение MACD только что имело место и  при этом цена в пределах допуска (не шибко далеко убежала), то ставим ордер.

В чём у Вас проблема-то? 

 
drknn:

В перемнные вносим значения MACD на трёх последних свечках - это позволит отследить точку пересечения. Если при этом цена выше/ниже скользящей, то нужно вычислить на сколько пунктов. Если пересечение MACD только что имело место и  при этом цена в пределах допуска (не шибко далеко убежала), то ставим ордер.

В чём у Вас проблема-то? 


Проблема в том, что я только начал заниматься программированием, с остальной частью у меня проблем не возникнет, а вот в этом я сразу увидел проблему.

Если можете, сделайте набросок по своим словам, заранее благодарен
 
autotrading1:

Проблема в том, что я только начал заниматься программированием, с остальной частью у меня проблем не возникнет, а вот в этом я сразу увидел проблему.

Если можете, сделайте набросок по своим словам, заранее благодарен


Code Base

Посмотрите в Code Base, там есть много вариантов советников на МАКДи .Особенно в начале .

Или наберите в поиске форума "Советник на МАКДи".Там тоже будет много ссылок на готовые светники с МАКДи, на дюбой вкус .

А тем более, если Вы только начинаете изучать программирование особенно будет интересно почитать опубликованные статьи .Там все подробно расписано и разъяснено.

Например эта статья "Пример создания эксперта"

 
gss спасибо, почитаю, но все же только своими силами я его врядли состряпаю
 

Вы не поняли, как использзовать показания индикаторов. Для этого нужно ввести значение индикатора в переменную. Чтоб сделать это без ошибок, нужно попросту руководствоваться справкой в метаэдиторе - там инфы предостаточно. Ну а с переменными мы можем опосля делать что угодно.

Например,  объявляем переменную, которая будет содержать значение скользящей на первой свече.

double  MA_1;

Открываем справку:

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift) 

Руководствуясь описаниями параметров, которые даны в справке ниже этой строчки, пишем код 55-ти периодного скользящего среднего (обычного), построенного по ценам закрытия:

МА_1=iMA(Symbol(),0,55,0,MODE_SMA,PRICE_CLOSE,1);

Ну вот и всё. С индикатором MACD поступаем точно так же. 

 
autotrading1:
gss спасибо, почитаю, но все же только своими силами я его врядли состряпаю

Состряпаете, если на самом деле будет нужно.На форуме обязательно помогут, при условии, что сами что-то будете делать.И обязательно нужно прочитать статьи и докыментацию.А базе обязательно найдется советник на любой вкус.

В вашем случае примерно так:

1. Moving Average Convergence/Divergence (MACD)

Оперирует четырьмя переменными: MACDFast (период быстрой МА), MACDSlow (период медленной МА), MACDSignal (период сигнальной МА) и MAPrice
(цена расчета средних). Сигналы также просты: BUY - главная линия выше сигнальной, SELL - главная линия ниже сигнальной.
"Нет сигнала" не используется.

if (UseMACD)
{
double MACDMain1 = iMACD(Symbol(), 0, MACDFast, MACDSlow, MACDSignal, MACDPrice,
MODE_MAIN, 1); // значение индикатора на 1 баре, тот,который только что закончился


double MACDMain2 = iMACD(Symbol(), 0, MACDFast, MACDSlow, MACDSignal, MACDPrice,
MODE_MAIN, 2); // значение индикатора на предыдущем (перед 1 баром) 2 баре

double MACDSig1 = iMACD(Symbol(), 0, MACDFast, MACDSlow, MACDSignal, MACDPrice,
MODE_SIGNAL, 1);
if (MACDMain1 > MACDSig1 && MACDMain2<0 && MACDMain1>0) // Buy Signal
Signal++;
if (MACDMain1 < MACDSig1 && MACDMain2>0 && MACDMain1<0) // Sell Signal
Signal--;
}

2. Индикатор Envelopes

Использует целых пять внешних переменных: EnvPeriod (период индикатора), EnvPrice (цена расчета), EnvShift (сдвиг вправо),
EnvMethod (метод сглаживания) и EnvDeviation (отклонение индикатора - в Вашем случае 10 пипсов. ). Так как внешний вид, да и сама суть индикатора - канал,
то сигналы подобны сигналам при работе в канале: BUY - цена закрытия свечи ниже нижней линии, SELL - цена закрытия свечи выше
верхней линии и "нет сигнала" - цена закрытия между линиями.

if (UseEnvelopes)
{
double EnvUp = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
EnvDeviation, MODE_UPPER, 1);
double EnvDn = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
EnvDeviation, MODE_LOWER, 1);
if (Close[1] < EnvDn) // Buy Signal
Signal++;
if (Close[1] > EnvUp) // Sell Signal
Signal--;
}

или можно записать попроще условие 2 индикатора:

if (UseCrossMA)
{
double MAFast_b = iMA(Symbol(), 0, MAFastPeriod, MAFastShift, MAFastMethod,
MAFastPrice, 1) + N*Point; // здесь N ваши 10 пунктов над средней
double MAFast_s = iMA(Symbol(), 0, MAFastPeriod, MAFastShift, MAFastMethod,
MAFastPrice, 1) - N * Point; // здесь соответсвенно 10 пунктов ниже средней.Получается канал повторяющий движение самой средней.


if (MAFast_b > Close [1]) // Buy Signal
Signal++;
if (MAFast_s < Close[1]) // Sell Signal
Signal--;
}

Есть еще и другие виды каналов, экспеременируйте и читайте статьи и документацию форума.Актовнее используйте "поиск", наверняка,то что Вы хотите уже давно сделали за Вас и выложили для народа в свободный доступ.

А это обязательно должно быть в начале советника:

extern string A1 = "Настройки индикатора MACD";
extern bool UseMACD = False;
extern int MACDFast = 12;
extern int MACDSlow = 26;
extern int MACDSignal = 9;
extern int MACDPrice = 0;

extern string A2 = "Настройки индикатора Envelopes";
extern bool UseEnvelopes = False;
extern int EnvPeriod = 21;
extern int EnvShift = 0;
extern int EnvMethod = 0;
extern int EnvPrice = 0;
extern double EnvDeviation = 0.5;

extern string A3 = "Настройки индикатора MA";
extern bool UseCrossMA = False;
extern int MAFastPeriod = 34;
extern int MAFastPrice = 0;
extern int MAFastMethod = 0; // Метод MA:
// 0 - Simple MA
// 1 - Exponential MA
// 2 - Smoothed MA
// 3 - Linear weighted MA
extern int MAFastShift = 0;

extern int N =10;

и ниже уже в функции старрт( за основу возьмите любой простой советник из базы)

Вот сдесь Ищу мультииндикаторный шаблон советник я выкладывл шаблон советника, там более 30 индикаторов. Только нужно включать их (или выключать) по своему усмотрению ( в настройках это сигналы True и False. )

И обязательно сами тоже думайте и работайте.

Халявщиков здесь, как и везде, не любят.

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