Ответить
02.01.2014, 11:30
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Да что ты всё про бейсик вспоминаешь? Может ты будешь удивлён, но я ни одной программы не написал на С или С++. И вообще не пытался. И до изучения mql тоже работал только с бейсиком. Ничего сложного в этом нет, это условие такое-же как и в бейсике if((Q1 = 0 or A > B) and (Q2 = 0 or C < D) and Е > F)
Очень хотелось-бы чтобы не-было в этом примере грубых синтаксических ошибок. Всё-таки уже несколько лет не вспоминал о бейсике.
Да, это наверное его ещё бадун не отпустил. Если он писал на васике или на любом другом языке, то имеет хоть какое то представление он булевой алгебре. Во всяком случае элементарное условие смог бы собрать.
Наверняка бадун во всём виноват.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Milord 
02.01.2014, 11:51
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
ну да, удивлен!))
не только я мучаюсь оказывается с переходом...)
можешь подсказать как с реверсом написать код?)вижу светлая голова, приятно видеть умных людей на сайте...)
Если в твоих словах оставить только выделенное жирным, то будет точней сказано.
Ну а про реверс тебе уже ответили.
Milord 
02.01.2014, 12:19
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию Конкурс в честь Нового Года, кто напишет самый непонятный код?)

Конечно хочу, у нас Новый Год или нет?!
Код 100% рабочий, но в реале я бы не стал так делать, а написал бы как Ugar выше показал.
может тогда в честь Нового Года объявим конкурс неофициальный на самый непонятный код из 10 строк, с комментами?)))
по типу этого(взято из инета )
PHP код:
private void _1(_1 _2
        { 
          while(
_2._1()) 
          { 
            
_1 _2._1(true); 
            
_1._1(); 
            
_1(_1); 
           } 
        } 
или вот примерчик:
PHP код:
#include <iostream>
using namespace std;
 
#define ___(__) char(__)
 
int main(int _char **____)
{
    
cout << ___((_=1_<<=6_+0x09));
    
cout << ___((_=1_<<=5_+0x00));
    
cout << ___((_=1_<<=6_+0x0C));
    
cout << ___((_=1_<<=6_+0x29));
    
cout << ___((_=1_<<=6_+0x2B));
    
cout << ___((_=1_<<=6_+0x25));
    
cout << ___((_=1_<<=5_+0x00));
    
cout << ___((_=1_<<=6_+0x03));
    
cout << ___((_=1_<<=5_+0x0B));
    
cout << ___((_=1_<<=5_+0x0B));
 
    return 
0;

скажу честно - смотрю на сии перлы "яко баран на новые ворота")))
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 02.01.2014 в 12:53.
02.01.2014, 14:13
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию А так будет работать???

Странный вопрос. Это же простая логика.
if((Q1==0 || A>B) && (Q2==0 || C<D) && E>F)
{
OrderSend(...);
}
а если сделать наоборот, логика работы не изменится?
PHP код:
if((Q1==&& A>B) || (Q2==&& C<D) || E>F)
{
OrderSend(...);

тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
02.01.2014, 15:24
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
а если сделать наоборот, логика работы не изменится?
PHP код:
if((Q1==&& A>B) || (Q2==&& C<D) || E>F)
{
OrderSend(...);

Изменится кардинально.
Ведь если последняя часть условия E > F будет выполнена, то первые две части условия никак не влияют на общий результат при любых значениях A, B, C, D, Q1 и Q2.
Milord 
02.01.2014, 16:30
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
может тогда в честь Нового Года объявим конкурс неофициальный на самый непонятный код из 10 строк, с комментами?)))
Конкурс? Да ещё и новогодний? А приз какой?
Что бы в новогодние праздники, программист начал напрягать мозги, приз должен быть такой, что бы увидев его программист аж протрезвел.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
02.01.2014, 17:00
Аватар для skyger
skyger skyger вне форума Интересующийся
Регистрация: 02.08.2013 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
С новым годом комрады! Счастья, здоровья и регулярных профитов!
Тут на медни попытался смастерить простенькую сову на тиках дабы понять физику процесса, однако опыт оказался неудачным. Будьте так любезны наставте на путь истинный, где, чего и как я упустил, и что мне сделать чтоб он заработал.

Скрытый текст

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright "и так понятно"
#property link "конечно моё"

extern int MA1=10;
extern int MA2=15;

extern double LotTrend = 1;
extern int TP=12;
extern int SL=12;

double ExtBuffer[], S1, S2, tickB;
int A=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

tickB=MarketInfo(Symbol(),MODE_BID);

if ( A>250) A=0;
A++;
ExtBuffer[A]=tickB;

S1=iMAOnArray(ExtBuffer,200,MA1,0,MODE_SMA,0);
S2=iMAOnArray(ExtBuffer,200,MA2,0,MODE_SMA,0);
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)
{
if (S1>S2)
{
OrderSend(Symbol(),OP_BUY,LotTrend,Ask,0,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
}
if (S1<S2)
{
OrderSend(Symbol(),OP_SELL,LotTrend,Bid,0,Bid+SL*Point,Bid-TP*Point,0,0,0,Green);
}
}



return(0);
}


//+---------------------конец фильма---------------------------------------------+
[свернуть]

Последний раз редактировалось NSerega; 02.01.2014 в 18:59.
02.01.2014, 22:59
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию Надо это дело обмозговать)

Конкурс? Да ещё и новогодний? А приз какой?
Что бы в новогодние праздники, программист начал напрягать мозги, приз должен быть такой, что бы увидев его программист аж протрезвел.
надо раскинуть мозгами,может Юля подключится и призы выделит?))
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
03.01.2014, 08:43
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
С новым годом комрады! Счастья, здоровья и регулярных профитов!
Тут на медни попытался смастерить простенькую сову на тиках дабы понять физику процесса, однако опыт оказался неудачным. Будьте так любезны наставте на путь истинный, где, чего и как я упустил, и что мне сделать чтоб он заработал.

Скрытый текст

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#property copyright "и так понятно"
#property link "конечно моё"

extern int MA1=10;
extern int MA2=15;

extern double LotTrend = 1;
extern int TP=12;
extern int SL=12;

double ExtBuffer[], S1, S2, tickB;
int A=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

tickB=MarketInfo(Symbol(),MODE_BID);

if ( A>250) A=0;
A++;
ExtBuffer[A]=tickB;

S1=iMAOnArray(ExtBuffer,200,MA1,0,MODE_SMA,0);
S2=iMAOnArray(ExtBuffer,200,MA2,0,MODE_SMA,0);
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)
{
if (S1>S2)
{
OrderSend(Symbol(),OP_BUY,LotTrend,Ask,0,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
}
if (S1<S2)
{
OrderSend(Symbol(),OP_SELL,LotTrend,Bid,0,Bid+SL*Point,Bid-TP*Point,0,0,0,Green);
}
}



return(0);
}


//+---------------------конец фильма---------------------------------------------+
[свернуть]
Наверное ты плохо разобрался с массивами и iMAOnArray()

Функция iMAOnArray() используется с динамическими массивами и считает среднее значение последних ячеек массива, а у тебя массив статический и когда ты обнуляешь счётчик массива то запись происходит в начало массива постепенно заменяя прежние значения новыми.
В твоём примере надо обеспечить запись нового значения в конец массива со сдвигом всех значений на позицию вверх с потерей нулевого элемента массива.
skyger 
03.01.2014, 08:56
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
надо раскинуть мозгами,может Юля подключится и призы выделит?))
Только если уж код непонятный, то и комментов в нём не должно быть. Если с комментами, какой же он тогда непонятный.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
03.01.2014, 12:07
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Только если уж код непонятный, то и комментов в нём не должно быть. Если с комментами, какой же он тогда непонятный.
логично)))
я примерно знаю какой код вы напишите, с 10-ю нулями, как показывали))
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
03.01.2014, 13:21
Аватар для skyger
skyger skyger вне форума Интересующийся
Регистрация: 02.08.2013 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
Наверное ты плохо разобрался с массивами и iMAOnArray()

Функция iMAOnArray() используется с динамическими массивами и считает среднее значение последних ячеек массива, а у тебя массив статический и когда ты обнуляешь счётчик массива то запись происходит в начало массива постепенно заменяя прежние значения новыми.
В твоём примере надо обеспечить запись нового значения в конец массива со сдвигом всех значений на позицию вверх с потерей нулевого элемента массива.
Большое спасибо за ответ , но это внесло еще большую сумятицу в мою неокрепшую после праздников психику. Как я понимаю сначала создается массив тик[]=Bid; где идет запись тиков как и баров от свежайшего нулевого тика, который только что только поступил, до наиболее старшего-древнего, который был самым первым. Поэтому как я понял для использования ф-ции iMAOnArray() необходимо произвести инверсию подсчета или же ввести свою ф-цию расчета среднего. Дальше как я понимаю необходимо организовать цикл , ибо любой расчет средней сопровождается циклом. Ну а далее лигические условия торговли. Короче надо еще пошевелить мозгами.
03.01.2014, 13:51
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Большое спасибо за ответ , но это внесло еще большую сумятицу в мою неокрепшую после праздников психику. Как я понимаю сначала создается массив тик[]=Bid; где идет запись тиков как и баров от свежайшего нулевого тика, который только что только поступил, до наиболее старшего-древнего, который был самым первым. Поэтому как я понял для использования ф-ции iMAOnArray() необходимо произвести инверсию подсчета или же ввести свою ф-цию расчета среднего. Дальше как я понимаю необходимо организовать цикл , ибо любой расчет средней сопровождается циклом. Ну а далее лигические условия торговли. Короче надо еще пошевелить мозгами.
Восстанавливай здоровье и обрати внимание, что размер массива нигде не указан, так что на самом деле ничего у тебя не создается.
Алексей ключевую идею дал, делай движущееся "окно" во времени и снимай с него средние с нужным периодом. Я бы даже не стал iMAOnArray() вызывать, проще и понятнее самому посчитать.
03.01.2014, 14:34
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Восстанавливай здоровье и обрати внимание, что размер массива нигде не указан, так что на самом деле ничего у тебя не создается.
Алексей ключевую идею дал, делай движущееся "окно" во времени и снимай с него средние с нужным периодом. Я бы даже не стал iMAOnArray() вызывать, проще и понятнее самому посчитать.
А может и зря. Функция быстрей цикла. Просто перед использованием iMAOnArray() надо поменять направление индексации. Или сделать не так как я сначала говорил. Ошибся не тщательно обдумав. Если функция iMAOnArray() работает от нулевого индекса на указанную глубину, то заполняя массив, при поступлении нового тика, все элементы массива надо сдвигать на единицу в сторону увеличения индекса, а новый тик писать в нулевой.
03.01.2014, 16:58
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
А может и зря. Функция быстрей цикла. Просто перед использованием iMAOnArray() надо поменять направление индексации. Или сделать не так как я сначала говорил. Ошибся не тщательно обдумав. Если функция iMAOnArray() работает от нулевого индекса на указанную глубину, то заполняя массив, при поступлении нового тика, все элементы массива надо сдвигать на единицу в сторону увеличения индекса, а новый тик писать в нулевой.
iMAOnArray() вообще капризная штука, не всегда правильно работает, и уж точно не быстрее прямого расчета среднего. Разность двух машек никаких циклов не требует, у нее элементарная рекурсивная форма есть.
skyger 
03.01.2014, 17:52
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
А может и зря. Функция быстрей цикла.
Тебе может понравиться принт вот этого скрипта. Брось на любой график, где есть несколько тысяч баров.

Скрытый текст

Код:
#include <stdlib.mqh>
double B[],fma[],cma[];

int start() {
int i,t;
   ArrayResize(B,Bars);
   ArrayResize(fma,Bars);
   ArrayResize(cma,Bars);
   ArraySetAsSeries(B,true);
   for(i=Bars; i>0; i--) B[i]=Close[i];

   t=GetTickCount();
   for(i=Bars; i>0; i--) c(i);
   Print ("SimpleCode exec time: ", GetTickCount()-t);

   t=GetTickCount();
   for(i=Bars; i>0; i--) f(i);
   Print ("iMAOnArray exec time: ",GetTickCount()-t);
   
   for(i=0; i<Bars; i++) {
      if(!CompareDoubles(fma[i],cma[i])) {
         Alert("Fail @",i,":",fma[i]+"!="+cma[i]);
         break;
      }
   }
}

void f(int P) {
   for(int i=Bars; i>0; i--) fma[i]=iMAOnArray(B,0,P,0,0,i);
}

void c(int P) {
   for(int i=Bars; i>0; i--) cma[i]=cma[i+1]+(B[i]-B[i+P])/P;
}
[свернуть]
03.01.2014, 18:01
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
iMAOnArray() вообще капризная штука, не всегда правильно работает, и уж точно не быстрее прямого расчета среднего. Разность двух машек никаких циклов не требует, у нее элементарная рекурсивная форма есть.
У iMAOnArray() есть преимущество, легко переключить метод усреднения.
По скорости не знаю, не мерил. А вот глюков не замечал, хотя пользую не часто.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
03.01.2014, 18:42
Аватар для skyger
skyger skyger вне форума Интересующийся
Регистрация: 02.08.2013 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
Восстанавливай здоровье и обрати внимание, что размер массива нигде не указан, так что на самом деле ничего у тебя не создается.
Алексей ключевую идею дал, делай движущееся "окно" во времени и снимай с него средние с нужным периодом. Я бы даже не стал iMAOnArray() вызывать, проще и понятнее самому посчитать.
Спасибо за подсказку, я только начал изучать MQL4 , многих вещей не понимаю, так беру примеры и пытаюсь понять логику. Вот придумал себе задачку, ковыряюсь по-немногу, могу и важное пропустить, в книгах ведь не все пишут делайраз, делай два.
Касательно самостоятельного расчета мувингов в одном из индикаторов нашел такой код:

double TickSMA(double array[],int per)
{
double Sum = 0;
for(int i = 0;i < per;i++) Sum += array[i];
return(Sum/per);
}
думаю подойдет. Или вы имели , что более продвинутое? Сложнее я пока не потяну мозгами, пока.
03.01.2014, 19:19
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Тебе может понравиться принт вот этого скрипта. Брось на любой график, где есть несколько тысяч баров.

Скрытый текст

Код:
#include <stdlib.mqh>
double B[],fma[],cma[];

int start() {
int i,t;
   ArrayResize(B,Bars);
   ArrayResize(fma,Bars);
   ArrayResize(cma,Bars);
   ArraySetAsSeries(B,true);
   for(i=Bars; i>0; i--) B[i]=Close[i];

   t=GetTickCount();
   for(i=Bars; i>0; i--) c(i);
   Print ("SimpleCode exec time: ", GetTickCount()-t);

   t=GetTickCount();
   for(i=Bars; i>0; i--) f(i);
   Print ("iMAOnArray exec time: ",GetTickCount()-t);
   
   for(i=0; i<Bars; i++) {
      if(!CompareDoubles(fma[i],cma[i])) {
         Alert("Fail @",i,":",fma[i]+"!="+cma[i]);
         break;
      }
   }
}

void f(int P) {
   for(int i=Bars; i>0; i--) fma[i]=iMAOnArray(B,0,P,0,0,i);
}

void c(int P) {
   for(int i=Bars; i>0; i--) cma[i]=cma[i+1]+(B[i]-B[i+P])/P;
}
[свернуть]
что скрипт делает, если в кратце???

P.S. - ВСЕХ С НОВЫМ ГОДОМ!!!
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 03.01.2014 в 19:22.
03.01.2014, 19:25
Аватар для ansol
ansol ansol вне форума
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,021
Поблагодарили 856 раз(а) / Репутация: 842
Цитата:
что скрипт делает, если в кратце???
Меряет скорость исполнения для iMAonArray и для простого суммирования с делением на количество слагаемых
Milord 
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 15:59. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO