[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 325
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, как прописать при увеличении разницы двух EMA (пятидневные/мин. и макс.,) продавать лонг по максимуму EMA и откупать шорт по минимуму EMA?
В качестве разницы двух EMA использую «Rastvor» в заголовке глобальных переменных.
Как прописать данный код в торговых критериях?
Т.е. Vol_Arr[] нужно инициализировать как глобальный массив я так понимаю.
Вопрос конечно нубский, НО.
1. Почему тогда объемы в индикаторе отображаются корректно.
2. Я при подсчете обращаюсь не к Vol_Arr[] , а к AOBuffer3[].
Спасибо!
При объявлении массива (не буфера) вы должны явно указать его размер.... как минимум.
Т.е. Vol_Arr[] нужно инициализировать как глобальный массив я так понимаю.
Вопрос конечно нубский, НО.
1. Почему тогда объемы в индикаторе отображаются корректно.
2. Я при подсчете обращаюсь не к Vol_Arr[] , а к AOBuffer3[].
Спасибо!
под указанный же массив (Vol_Arr[]) память Вы не отводите совсем, ни статически ни динамически.
2. Насколько я вижу по коду, в массиве AOBuffer3[] у Вас рассчитывается разность МА, а не объемы
Объемы учитываются в ExtMapBuffer1
Можно инициализировать Vol_Arr[] как глобальный, можно с модификатором статик - на выбор, но память нужно отводить в любом случае или связать с индикаторным буфером, как и предыдущие два массива - да мало ли вариантов.
1. Оба массива, которые Вы используете Вами же и связаны с индикаторными буферами - то есть, память под них отводится (хотя и неявно)
......
Владислав, пересмотрел код еще раз. Часть кода с Vol_Arr[] осталась от старой версии индикатора, я ее удалил.
Думаю, что ошибка все-же в этой части кода, но не пойму где! Закоментил эту часть кода более подробно.
Владислав, пересмотрел код еще раз. Часть кода с Vol_Arr[] осталась от старой версии индикатора, я ее удалил.
Думаю, что ошибка все-же в этой части кода, но не пойму где! Закоментил эту часть кода более подробно.
Вот он:
#property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 SteelBlue #property indicator_width1 2 //---- basic fan indicator parameters extern bool Show_AOLine_2=true; extern int SlowEMA3=34; extern int EMA=2; extern bool Show_Volume=true; extern double coaf=1.5; extern bool Show_Vol_line=true; //---- indicator buffers double AOBuffer3[]; double ExtMapBuffer1[]; double VLUP; double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s; datetime tmhgh, tmlw; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings string name_ind = "Awesome_super_volumes"; IndicatorShortName("Awesome_super_volumes"); //---- AO_fan line 2 (basic) if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; } else {Show_AOLine_2=DRAW_NONE; } SetIndexBuffer(0,AOBuffer3); SetIndexStyle(0,Show_AOLine_2); SetIndexLabel(0,"basic line"); SetIndexBuffer(1,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexLabel(1,"Volume"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Awesome Oscillator | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double prev,current; //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- AO_fan line 2 (basic) buffer for(int i=0; i<limit; i++) { //---- AO_fan basic line + Volumes AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i); if (Show_Volume==true) { double nSum = Volume[i]*Point*coaf; if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum; if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum; } } //-- Поиск High & Time if (AOBuffer3[i]>=0) //Если Awesome больше нуля { prhgh_s = High[i]; // ----- if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0 } //-- Поиск Low & Time if (AOBuffer3[i]<=0) //Если Awesome меньше нуля { prlw_s = Low[i]; // ----- if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];} // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0 } // -- Пересчет баров от High до Low int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw); //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение colbr = 0 int shift=iBarShift(NULL,0,tmlw); // -- Это точка отсчета for (i=0; i<=colbr; i++) {VLUP += MathAbs(iVolume(NULL,0, shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара // -- Значение VLUP = 47 SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black); SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10); SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10); SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10); SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10); //---- done return(0); } //+------------------------------------------------------------------+ void SetText(string name, string Vl, datetime t1, double p1, color c) { // if (ObjectFind(name)!=-1) ObjectDelete(name); ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0); ObjectSetText(name, Vl, 10, "Times New Roman", c); ObjectSet(name, OBJPROP_TIME1 , t1); ObjectSet(name, OBJPROP_PRICE1, p1); ObjectSet(name, OBJPROP_COLOR, c); } void SetText2(string name, string text, int xdist, int ydist, color c, int size) { ObjectCreate(name,OBJ_LABEL,0,0,0,0,0); ObjectSet(name, OBJPROP_XDISTANCE, xdist); ObjectSet(name, OBJPROP_YDISTANCE, ydist); ObjectSetText(name,text,7,"Arial Black",c); }Спасибо еще раз!
Вот он:
На вскидку:
Выделенный фрагмент вне цикла, а в нем используется счетчик цикла i - что-то не так или с логикой или с реализацией
А зачем Вам фигуры в виде CSV файлов?
Нужны для тестирования и отладки алгоритмов распознавания.
Напиши сам, чтоб понимать их, а не брать чьи-то.
Что именно написать? Вы имеете ввиду, самостоятельно разметить фигуры на графике и экспортировать соответствующие куски истории? Это решение пока что является первым на очереди, но до сих пор надеюсь, что кто-то это уже сделал. Ведь это просто рутинная работа.
Много не значит лучше!
Позвольте не согласиться. Чем больше будет набор для тестирования, тем более статистически достоверным будет результат работы программы.
p.s. Вопрос по-прежнему актуален. (См. вопрос в этом сообщении )
Всем привет!!!
Подскажите, пожалуйста, какой код нужен, чтобы лонг закрывался по максимуму текущей МА.
Ниже собственно торговые критерии и красным выделено, что не понятно.
Также не понятно, как задать программе выходить из позиции,
после увеличения разницы между МА1 и МА2?
//--------------------------------------------------------------- 5 --
// Торговые критерии
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,1); // МА_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,1); // МА_2
if ( iHigh (Symbol(),Period(),0) >= MA_1_t) //
{
Opn_S=true;
}
if ( iLow (Symbol(),Period(),0) <= MA_2_t) //
{
Opn_B=true; // Критерий откр. Buy
}
if (какой нужен код, чтобы лонг закрылся по сегодняшней максимальной iMA???)
{
Cls_B=true;
}
//--------------------------------------------------------------- 6 --
На вскидку:
Выделенный фрагмент вне цикла, а в нем используется счетчик цикла i - что-то не так или с логикой или с реализацией
Спасибо Владислав! Кое-что начало получаться. Но почему-то только так?! :(
Еще вопрос почему в окне индикатора не отображаются текстовые метки?