Не, подскажите как объявить эти функции... выдает ошибки... не могу никак разобраться, что куда вставлять... начинаю программировать у меня готовый советник, пытаюсь прикрутить...
А вот этоНаписал код индикатора. Работает но с ошибкой. Помогире разобраться.
На нулевом тф три стохастика в зонах перекуплености/перепродоности , ставим в зоне квадратик на уровне 5/95.
А если и в добавок еще и стохастик старшего ТФ в той зоне, тогда ставим и квадратик на уровне 5/95 , и ромбик на уровне 0/100.
На рисунке показал, что внизу в зоне перепродоности нет ни квадратиков ни ромриков.
Вроде все понятно, надо проверять условия. Но я их проверял уже много раз и наверное зациклился и не могу найти ошибку.
Помогите.
А вот это
Stoch2[1]<LevelL &&
тебя не смущает?
Уважаемые знатоки, в сотый раз беспокою глупыми вопросами, но самостоятельно не могу разобраться. Есть такая функция рукотворная)
double SamiVisokiOrder()
{
int x;
int indexmas;
double znachenie;
double MasCen[100];
for(x=0;x<OrdersTotal();x++)
{
if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES)==true)
{
indexmas=x-1;
MasCen[x]=OrderOpenPrice();
znachenie=ArrayMaximum(MasCen,WHOLE_ARRAY,0);
}
}
return znachenie;
}
в ней хочу получить значение самого высокого из открытых ордеров. Но получаю ошибку при запуске советника (array out of range). вроде всё по мануалам, переменная Х больше нигде не используется и объявлена локально. Большая просьба подсказать где не прав. Думаю для завсегдатых этой ветки это даже не вопрос, но я в тупике. Или подскажите другой путь определения самого высокого ордера. Заранее благодарен.
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 04.06.2008 |
//| Описание : Возвращает цену открытия ближайшей позиции. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
double mi, oop=0, p;
int i, k=OrdersTotal(), pp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) mi=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
pp=MathAbs(OrderOpenPrice()-mi)/p;
oop=OrderOpenPrice();
}
}
}
}
}
}
return(oop);
}
'GetTypeLastOpenPos' - function can be declared only in the global scope
как исправить... на глобальном уровне... че только не делал
//------- Подключение внешних модулей --------------------------------------------+
//-- Подключаемые модули --
#include <stdlib.mqh> // Стандартная библиотека МТ4
Господа программисты. Вопрос скорее по математике. Нужно найти второй минимум при восходящем тренде или второй максимум при нисходящем тренде. Нужно для построения равноудалённого канала получить время и цену. Первая точка понятно самая низкая или самая высокая на графике, третью тоже можно найти, а вот со второй проблемка. Может у кого есть готовое решение?
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 13.08.2008 |
//| Описание : Возвращает номер бара фрактала по его номеру. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий ТФ) |
//| nf - номер фрактала ( 0 - последний) |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
if (sy=="" || sy=="0") sy=Symbol();
double f=0;
int i, k=iBars(sy, tf), kf;
for (i=2; i<k; i++) {
f=iFractals(sy, tf, MODE_LOWER, i);
if (f!=0) {
kf++;
if (kf>nf) return(i);
}
f=iFractals(sy, tf, MODE_UPPER, i);
if (f!=0) {
kf++;
if (kf>nf) return(i);
}
}
Print("GetFractalBar(): Фрактал не найден");
return(-1);
}
Спасибо за ответ, но доработать функцию не смог. Допилил свою. Незнаю насколько правильно со стороны грамотности написания, но работает. На всякий случай опубликую код мож кому сгодится. Я его использую для того чтоб найти отскок между самым верхним и нижним ордерами в %
double SamiVisokiOrder()
{
int x;
int indexmas;
double znachenie;
double MasCen[];
ArrayInitialize(MasCen,EMPTY_VALUE);
for(x=0;x<OrdersTotal();x++)
{
if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES)==true)
{
indexmas=x+1;
ArrayResize(MasCen,indexmas);
MasCen[x]=OrderOpenPrice();
znachenie=MasCen[ArrayMaximum(MasCen,WHOLE_ARRAY,0)];
}
}
return znachenie;
}
Если MasCen используется только для определения самого высокого ордера, то можно обойтись без массива.Спасибо за ответ, но доработать функцию не смог. Допилил свою. Незнаю насколько правильно со стороны грамотности написания, но работает. На всякий случай опубликую код мож кому сгодится. Я его использую для того чтоб найти отскок между самым верхним и нижним ордерами в %
double SamiVisokiOrder()
{
int x;
int indexmas;
double znachenie;
double MasCen[];
ArrayInitialize(MasCen,EMPTY_VALUE);
for(x=0;x<OrdersTotal();x++)
{
if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES)==true)
{
indexmas=x+1;
ArrayResize(MasCen,indexmas);
MasCen[x]=OrderOpenPrice();
znachenie=MasCen[ArrayMaximum(MasCen,WHOLE_ARRAY,0)];
}
}
return znachenie;
}
int max_pr=0;int max_tifor (int i=0; i<OrdersTotal(); i++){ if(!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue; if(OrderOpenPrice()>max_pr){ max_pr =OrderOpenPrice(); max_ti = OrderTicket(); }}
Ты ищешь фрактал на 1 баре. Его там может и не быть.Добрый день не могу считать показания фракталов.
Fractals_www_fx1618_com_by = iCustom(NULL,0,"Fractals_www_fx1618_com",0,1);
Fractals_www_fx1618_com_sell = iCustom(NULL,0,"Fractals_www_fx1618_com",1,1);
}
Comment ("Цена продажи: " + DoubleToStr(Fractals_www_fx1618_com_by, 5) +"\n"+"Цена покупки: " + DoubleToStr(Fractals_www_fx1618_com_sell, 5)+"\n"+"Цена : " + DoubleToStr(MA_ANGL_FLAT, 5));
Считываю фрактал через icustom ,но собственно в режиме реального времени coment в тесте не отображает какое то изменение в ячейке памяти в прогоне,
Подскажите как мне считывать фракталы ,и чтобы они потом записывались в ячейки и обнулялись при появлении противоположного фрактала.Помогите неучу!o_olease:
Здравствуйте!
Пытаюсь получить верхнюю и нижнюю границы индикатора, который прилагаю. Как получить значения линий?
Мой вариант не работает.
double ind_1 = iCustom (NULL,PERIOD_CURRENT,"PZ_SwingTrading","---- Indicator Settings",300,50,3000, FALSE,FALSE,0,0);
double ind_2 = iCustom (NULL,PERIOD_CURRENT,"PZ_SwingTrading","---- Indicator Settings",300,50,3000, FALSE,FALSE,1,0);
Comment ("\n","1 = ",ind_1,"\n","2 = ",ind_2);