В папке лежит origin.txtДа! И если метаквоты правы, то вы знаете, от какого ДЦ эта папка, да?
Я вот и не знаю. Помогите!
В папке лежит origin.txt
А вам не кажется, что вы сами нарываетесь на такое отношение, я вам говорю как есть, а вы меня просите что-то вам доказывать? Я обязан это делать? Я вам пытаюсь помочь прояснить ситуацию, а вы меня начинаете проверять на правду? :facepalm:Врать нехорошо! оО
Ничего похожего нет и не было никогда! Если приложение называется "Уродыинста", то и папка будет называться в "документс энд сеттингз" как "уродыинста", не не как в вышеприведенном примере!
Вот это:
2E6A005861382433BE12963DE9029B61
Придумали идиоты метаквоты.
Попробуйте доказать обратное
Так как 0 бар меняется, придётся пересчитывать все бары что бы они то же менялись.Здравствуйте. Помогите решить такую задачу: при написании индикатора необходимо, чтобы он прибавлял значение индикатора нулевого бара (например столбец MACD) к значению индикатора 1-го, 1-го к 2-го и т.д. Как это можно реализовать? Уже неделю бьюсь безрезультатно. Помогите пожалуйста.
for(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
for(int i=0; i<limit; i++)
{ MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
if(i>0)MacdBuffer[i]=MacdBuffer[i]+MacdBuffer[0];
}
Должно работать и так. Если раздражает, можно поставить & перед именем массива в той строке.Подскажите пожалуйста, кто знает, как понять строку arrays passed by reference only(массивы передаются только по ссылке).Это после компиляции советника в новом билде.
Андрей, ты наверное сегодня чуток перебрал, или я ничего не понял из твоего кода. Зачем такие нагрузки на комп?Здравствуйте. Помогите решить такую задачу: при написании индикатора необходимо, чтобы он прибавлял значение индикатора нулевого бара (например столбец MACD) к значению индикатора 1-го, 1-го к 2-го и т.д. Как это можно реализовать? Уже неделю бьюсь безрезультатно. Помогите пожалуйста.
Так как 0 бар меняется, придётся пересчитывать все бары что бы они то же менялись.
Значит меняем limit=Bars-counted_bars; на limit=Bars;
В MACD быры перебираются от 0. Значит при расчёте всех остальных баров, значение 0 уже посчитано, нужно просто прибавить.
Вместо
делаемКод:for(int i=0; i<limit; i++) MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
Как то так.Код:for(int i=0; i<limit; i++) { MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); if(i>0)MacdBuffer[i]=MacdBuffer[i]+MacdBuffer[0]; }
Должно работать и так. Если раздражает, можно поставить & перед именем массива в той строке.
void OnTimer()
{
//---
int total = OrdersTotal();
ArrayResize(orders_arr, total);
for(int i=0; i<total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
orders_arr[i].num_account = AccountNumber();
orders_arr[i].num_order = OrderTicket();
orders_arr[i].symbol = OrderSymbol();
orders_arr[i].order_type = OrderType();
}
Print(orders_arr[i].num_account," ",orders_arr[i].num_order," ",orders_arr[i].symbol," ",orders_arr[i].order_type);
}
ResetLastError();
int handle=FileOpen(FileName,FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
FileSeek(handle,0,SEEK_SET);
FileWriteArray(handle,orders_arr,0,WHOLE_ARRAY);
FileClose(handle);
}
else Print("Failed to open the file, error ",GetLastError());
}
Мой вариант проще в реализации. Если человек задаёт вопросы, думаю ему это немаловажно.Андрей, ты наверное сегодня чуток перебрал, или я ничего не понял из твоего кода. Зачем такие нагрузки на комп?
Почему не использовать дополнительный буфер IndicatorBuffers(3); где #property indicator_buffers 2 (для MACD) и в него писать сумму показаний нулевого и первого баров. Дальше эти значения можно использовать для расчётов.
А дальше по необходимости, если надо эти показания рисовать, то можно добавить #property indicator_buffers 3 и эти значения будут отображаться.
Обрати внимание наПомогите плиз! Перестала работать функция FileWriteArray... в файл записывает без данных ((( После обновления работа с файлами не корректная...
Может я конечно где-то туплю...Код:void OnTimer() { //--- int total = OrdersTotal(); ArrayResize(orders_arr, total); for(int i=0; i<total; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { orders_arr[i].num_account = AccountNumber(); orders_arr[i].num_order = OrderTicket(); orders_arr[i].symbol = OrderSymbol(); orders_arr[i].order_type = OrderType(); } Print(orders_arr[i].num_account," ",orders_arr[i].num_order," ",orders_arr[i].symbol," ",orders_arr[i].order_type); } ResetLastError(); int handle=FileOpen(FileName,FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { FileSeek(handle,0,SEEK_SET); FileWriteArray(handle,orders_arr,0,WHOLE_ARRAY); FileClose(handle); } else Print("Failed to open the file, error ",GetLastError()); }
Это из справки. Может в этом проблема? Пока я не касался этого. Советник в котором есть запись в файл работает ещё на 509 билде. Сегодня тоже запустился без обновления. Теперь до следующих выходных будет жить в 509.раньше файлы всегда открывались в режиме FILE_SHARE_READ, FILE_SHARE_WRITE, теперь желательный режим открытия нужно указывать явно.
Обрати внимание на
Это из справки. Может в этом проблема? Пока я не касался этого. Советник в котором есть запись в файл работает ещё на 509 билде. Сегодня тоже запустился без обновления. Теперь до следующих выходных будет жить в 509.
Нам обоим стоит быть повнимательней. Из справкиУвы... Если с FILE_WRITE файл записывается, хотя и пустой, то с FILE_SHARE_WRITE вообще никакой реакции... причем handle нормальный! Так же проблема если вместо массива писать построчно с FILE_TXT, вообще не открывается и выдает 5004 ошибку... Пипец они накрутили...
В твоём массиве orders_arr.symbol = OrderSymbol();Записывает в файл типа BIN массивы любых типов, кроме строковых (может быть массив структур, не содержащих строки и динамические массивы).
Сам начал разбиратся. Еле накопал информацию и казалось уже понял. Но тут наткнулся на пример с журнала fortrader. Хороший пример. Но правильный на 95 или 100%.Подскажите пожалуйста, кто знает, как понять строку arrays passed by reference only(массивы передаются только по ссылке).Это после компиляции советника в новом билде.
int start() {
static int nTick = 0;
Inc( nTick );
Alert( «новый тик № » + nTick );
}
//—————————————
void Inc( int n ) { n++; }
Добавим один символ (&) в описание функции Inc() :
void Inc( int& n ) { n++; }
Выполнение советника радикально изменится:
новый тик № 1
новый тик № 2
новый тик № 3
…
Если в функции написать nTick++; то будет ошибка компиляции потому что переменная nTick локальна для функции start() не смотря на то что объявлена статической.Сам начал разбиратся. Еле накопал информацию и казалось уже понял. Но тут наткнулся на пример с журнала fortrader. Хороший пример. Но правильный на 95 или 100%.
Мне кажется что в первом варианте неПередача параметров в функцию по ссылке (по адресу)
Эта вещь прекрасно известна программистам на любом из универсальных языков программирования,
например, на C, а ещё более на C++. Напишем самый простейший советник
(файл t2.mq4 — здесь и далее имена тестовых примеров в прилагаемом архиве), и поместим его на
график любой валютной пары:
Результатом выполнения будет непрерывное повторение одного и того же результата: «новый тик №0»… Переданное в функцию значение n изменяется там, но это не производитPHP:int start() { static int nTick = 0; Inc( nTick ); Alert( «новый тик № » + nTick ); } //————————————— void Inc( int n ) { n++; }
никакого влияния на внешнее окружение функции (вызвавшую функцию
start()) — в функцию передаётся копия переменной nTick, так обычно работает вызов функций в MQL4.
Значок & указал, что в функцию нужно передать не копию, а оригинал переменной nTick, и все изменения, проделанные над этой переменной внутри функции, будут отражатьсяPHP:Добавим один символ (&) в описание функции Inc() : void Inc( int& n ) { n++; } Выполнение советника радикально изменится: новый тик № 1 новый тик № 2 новый тик № 3 …
на значении этой переменной снаружи функции. Такое
поведение называют побочный эффект функции.
будет алерт выдавать постоянно новый тик 0. Или будет?
Всё. Понял.
Если в функции написать nTick++; то будет увеличиватся значение в алерте. А так просто поработали с данными передаными и не изменили сами данные. Если надо менять сами данные которые передаются то перед вводной переменной в функции надо ставить &
В том то и дело что пока, требуются небольшие корректировки.
Запросто могут, в одном из следующих билдов ещё улучшить, выкинув большинство "устаревших" функций.