Другими словами, если я правильно понял, то: какой бы массив (в т.ч.и массив-таймсерию) я не скопировал с помощью функции ArrayCopy в ПОЛЬЗОВАТЕЛЬСКИЙ массив - для того, чтобы этот пользовательский массив стал массивом-таймсерией, я должен "обработать" его функцией ArraySetAsSeries со значением параметра set, равным true?
Уважаемые програмисты. просьба помочь в написании кода.по такому принцыпу -Сигнал BUY -открыть позицию BUY 1 .SL.TP.перевод в безубыток
Сигнал SELL -открыть позицию SELL 1. SL.TP.перевод в безубыток . Сигнал BUY- если есть открытые позиции BUY 1 и SELL 1 то открываем BUY 2. Сигнал SELL-еслиесли есть открытые позиции SELL 1 и BUY 1 то открываем SELL 2. Сигнал BUY- если есть открытые позиции SELL 1. BUY 1. SELL 2. то закрываем SELL 2. открываем BUY 2. Сигнал SELL - еслиесли есть открытые позиции BUY 1. SELL 1. BUY 2. то закрываем BUY 2. открываем SELL 2. Врынке не должно работать больше 3 ордеров .Если кто то сможет помочь. то очень большое спасибо.
//+------------------------------------------------------------------------------------------+//| ArraySetAsSeries.mq4 |//+------------------------------------------------------------------------------------------+//| script program start function |//+------------------------------------------------------------------------------------------+//------------------------------------ НАЧАЛО START -------------------------------------- 1 -int start() //функция start
{ //начало startdouble Timestart=GetTickCount(); //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скриптаdouble array1[][6]; //объявляем массив-источник (массив, из к-о будут скопированы данные)double array2[][6]; //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
//момент объявления заполнен некоторыми даннымиint element_1=ArrayCopyRates(array1); //копируем данные баров текущего графика в массив array1 int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY); //копируем данные всех баров в пользовательский массивbool element_3=ArrayGetAsSeries(array2); //проверка: является ли массив array1 массивом-таймсериейbool try_1=ArraySetAsSeries(array2,false); //устанавливаем НАПРАВЛЕНИЕ индексирования массива bool element_4=ArrayGetAsSeries(array2); //проверка: является ли массив array2 массивом-таймсериейdouble element=array2[0][1]; //получаем значение цены открытия нулевого бара//----------------------------------------------------------------------------------------- 2 -Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
"\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
"\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
"\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
"\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
"\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
"\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
" миллисекунд");//печать сообщения на экран//----------------------------------------------------------------------------------------- 3 -return(0); //выход из start
} //конец start//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -
В результате получил:
Естественно тут же возник вопрос: в данном случае функцией ArrayCopyRates(array1) я скопировал данные баров текущего графика в двумерный массив array1. После чего в следующей строке функцией ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) я скопировал данные массива array1 в массив array2. После чего функцией ArrayGetAsSeries проверил, является ли массив array2 массивом-таймсерией. И оказалось (как видно из скриншота), что массив таки является массивом-таймсерией, хотя предварительно я его не "обрабатывал" функцией ArraySetAsSeries.
Вопрос: почему в первом случае (предыдущий вопрос) требуется обработка функцией ArraySetAsSeries (чтобы искомый массив был организован как массив-таймсерия), а в этом случае такой обработки не требуется.
P.S. Извините за настойчивость, просто хочется полностью разобраться, чтобы не осталось "пробелов в истории". Благодарю за все предыдущие ответы.
И Вам не надо будет отвечать на очередную 100500 ую тупость !!!
Если есть такие вопросы это не вина человека который учится , это ваша вина !!! Вы это нигде не описали !!!
В справке это не написано , не написано как перевести из int в double
зато там написано что если к int присвоить значение типа double то дробная часть удалиться,
нормальный человек по логике вещей получит логическую мысль что при присвоении числа int к числу double то добавятся просто точка с заданным количеством нулей...
Не догадываетесь почему ??? Может быть стоит делать адекватные учебники ??? Может быть делать адекватное обучение ???
Эти вопросы не ко мне. Я пользователь. как и вы.
Может быть вообще где то эти вещи писать ???
Ну так я ж показал, где написано.
Может быть тогда вопросы исчезнут ???
Нет. они не исчезнут. Уверяю вас.
И Вам не надо будет отвечать на очередную 100500 ую тупость !!! Если есть такие вопросы это не вина человека который учится , это ваша вина !!! Вы это нигде не описали !!!
Эти вопросы не ко мне. Я пользователь. как и вы.
В справке это не написано , не написано как перевести из int в double зато там написано что если к int присвоить значение типа double то дробная часть удалиться,
нормальный человек по логике вещей получит логическую мысль что при присвоении числа int к числу double то добавятся просто точка с заданным количеством нулей...
ну да. присвоение работает в обе стороны.
вот только вы не включили свою логику дальше.
раз уж вы хотели по логике - то вам нельзя было делать два действия сразу. А надо было сначала присвоить даблу число. и только потом делить этот дабл на другое число. и тогда вы бы эту ошибку не заметили бы. а так столкнулись с ней. Но это наоборот хохрошо. рано или поздно вы бы к ней пришли.
Другими словами, если я правильно понял, то: какой бы массив (в т.ч.и массив-таймсерию) я не скопировал с помощью функции ArrayCopy в ПОЛЬЗОВАТЕЛЬСКИЙ массив - для того, чтобы этот пользовательский массив стал массивом-таймсерией, я должен "обработать" его функцией ArraySetAsSeries со значением параметра set, равным true?
Уважаемые програмисты. просьба помочь в написании кода.по такому принцыпу -Сигнал BUY -открыть позицию BUY 1 .SL.TP.перевод в безубыток
Сигнал SELL -открыть позицию SELL 1. SL.TP.перевод в безубыток . Сигнал BUY- если есть открытые позиции BUY 1 и SELL 1 то открываем BUY 2. Сигнал SELL-еслиесли есть открытые позиции SELL 1 и BUY 1 то открываем SELL 2. Сигнал BUY- если есть открытые позиции SELL 1. BUY 1. SELL 2. то закрываем SELL 2. открываем BUY 2. Сигнал SELL - еслиесли есть открытые позиции BUY 1. SELL 1. BUY 2. то закрываем BUY 2. открываем SELL 2. Врынке не должно работать больше 3 ордеров .Если кто то сможет помочь. то очень большое спасибо.
Да не партесь Вы так с динамическими массивами, задайте заранее, с запасом, или памяти вам не хватает?
Памяти у меня приемлимо, но тут же суть не в этом :)
Какой смысл задавать массив из потенциально огромной количество элементов, если там, как вариант, будет их в разы меньше?
Ведь создавая массив, он уже будет занимать часть оперативной памяти.
именно
Чуть-чуть видоизменил скрипт:
В результате получил:
Естественно тут же возник вопрос: в данном случае функцией ArrayCopyRates(array1) я скопировал данные баров текущего графика в двумерный массив array1. После чего в следующей строке функцией ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) я скопировал данные массива array1 в массив array2. После чего функцией ArrayGetAsSeries проверил, является ли массив array2 массивом-таймсерией. И оказалось (как видно из скриншота), что массив таки является массивом-таймсерией, хотя предварительно я его не "обрабатывал" функцией ArraySetAsSeries.
Вопрос: почему в первом случае (предыдущий вопрос) требуется обработка функцией ArraySetAsSeries (чтобы искомый массив был организован как массив-таймсерия), а в этом случае такой обработки не требуется.
P.S. Извините за настойчивость, просто хочется полностью разобраться, чтобы не осталось "пробелов в истории". Благодарю за все предыдущие ответы.
Не могу понять , или туплю ....
В теории должно быть 0,3 но почему то 0,00 ....
Тоже дает 0 ... Так как же получить дробные числа ?????
то же ноль ....
Уже не знаю с каким бубном прыгать .......
Не могу понять , или туплю ....
В теории должно быть 0,3 но почему то 0,00 ....
Тоже дает 0 ... Так как же получить дробные числа ?????
то же ноль ....
Уже не знаю с каким бубном прыгать .......
Читать документацию 3 раза в день по 4-5 часов. И только потом прыгать с бубном.
3.0/10.0
Не могу понять
и таких каждый день по десятку.
ПОЧЕМУ при делении одного числа на другое получается 0?
ПОЧЕМУ 3 деленное на 2 равно 1, а не 1.5?
ПОЧЕМУ выражение вычисляется неправильно?
ПОЧЕМУ выводится значение равное 0, хотя оно точно не равно 0?
ПОЧЕМУ при сравнении двух double, эксперт пишет, что они не равны, хотя я в журнале вижу, что они равны?
ПОЧЕМУ 0.0039 > 0.0039 и 0.0039 >= 0.0039 одинаковы
и таких каждый день по десятку.
ПОЧЕМУ при делении одного числа на другое получается 0?
ПОЧЕМУ 3 деленное на 2 равно 1, а не 1.5?
ПОЧЕМУ выражение вычисляется неправильно?
ПОЧЕМУ выводится значение равное 0, хотя оно точно не равно 0?
ПОЧЕМУ при сравнении двух double, эксперт пишет, что они не равны, хотя я в журнале вижу, что они равны?
ПОЧЕМУ 0.0039 > 0.0039 и 0.0039 >= 0.0039 одинаковы
Не догадываетесь почему ???
Может быть стоит делать адекватные учебники ???
Может быть делать адекватное обучение ???
Может быть вообще где то эти вещи писать ???
Может быть тогда вопросы исчезнут ???
И Вам не надо будет отвечать на очередную 100500 ую тупость !!!
Если есть такие вопросы это не вина человека который учится , это ваша вина !!! Вы это нигде не описали !!!
В справке это не написано , не написано как перевести из int в double
зато там написано что если к int присвоить значение типа double то дробная часть удалиться,
нормальный человек по логике вещей получит логическую мысль что при присвоении числа int к числу double то добавятся просто точка с заданным количеством нулей...
Вообщем как то так ....
Замени
на
Спасибо большое, буду пробовать!
Не догадываетесь почему ???
Может быть стоит делать адекватные учебники ???
Может быть делать адекватное обучение ???
Эти вопросы не ко мне. Я пользователь. как и вы.
Может быть вообще где то эти вещи писать ???
Ну так я ж показал, где написано.
Может быть тогда вопросы исчезнут ???
Нет. они не исчезнут. Уверяю вас.
И Вам не надо будет отвечать на очередную 100500 ую тупость !!!
Если есть такие вопросы это не вина человека который учится , это ваша вина !!! Вы это нигде не описали !!!
Эти вопросы не ко мне. Я пользователь. как и вы.
В справке это не написано , не написано как перевести из int в double
зато там написано что если к int присвоить значение типа double то дробная часть удалиться,
нормальный человек по логике вещей получит логическую мысль что при присвоении числа int к числу double то добавятся просто точка с заданным количеством нулей...
ну да. присвоение работает в обе стороны.
вот только вы не включили свою логику дальше.
раз уж вы хотели по логике - то вам нельзя было делать два действия сразу. А надо было сначала присвоить даблу число. и только потом делить этот дабл на другое число. и тогда вы бы эту ошибку не заметили бы. а так столкнулись с ней. Но это наоборот хохрошо. рано или поздно вы бы к ней пришли.