не могу понять это ошибка в самом коде моего скрипта, или я не правильно пытаюсь создать соединение скрипта с терминалом, например некорректно указываю путь папки, где находится терминал.
Добрый день, прошу помочь разобраться в вопросе работы отладчика. В теме https://forum.quik.ru/forum9/topic3269/ был поднят вопрос о том, как заставить алгоритм совершать только одну сделку на свечке и новую сделку совершать только при появлении новой свечи. Не уверен, что правильно понял вариант который был предложен в теме, но у меня получился примерно такой алгоритм
IF (USL1=1 AND (FLAGCDELOK +0 )= 0 AND CHETCHIKCIKLOV > 2)' USL1 принимает значение 1 когда имеются 2 подряд бычьи свечи алгоритм входа в позицию FLAGCDELOK = 1 END IF
IF CHETCHIKCIKLOV=0' цикл нужен для того, чтобы данные в CHETCHIKCIKLOVMAP не обнулялись при каждом проходе программы
CHETCHIKCIKLOVMAP=CREATE_COLLECTION() END IF
CHETCHIKCIKLOVMAP=INSERT_COLLECTION_ITEM(CHETCHIKCIKLOVMAP,0 , OPENMAP1)' здесь OPENMAP1 это цена открытия предпоследней (последней завершенной) свечи
CHETCHIKCIKLOVMAPTAB = GET_COLLECTION_COUNT (CHETCHIKCIKLOVMAP) CHETCHIKCIKLOVMAP1 = GET_COLLECTION_ITEM(CHETCHIKCIKLOVMAP,0) +0 CHETCHIKCIKLOVMAP2 = GET_COLLECTION_ITEM(CHETCHIKCIKLOVMAP,(0 +1))+0' здесь создается коллекция, куда по мере работы всего алгоритма записываются цены открытия последней завершенной свечи на момент времени исполнения данных команд, как правило алгоритм отрабатывается гораздо быстрее, чем время жизни одной 15-минутной свечки, и поэтому чаще всего будет, что CHETCHIKCIKLOVMAP1 =CHETCHIKCIKLOVMAP2. Но в момент появления новой свечи появляется новое значение OPENMAP1 и следовательно алгоритм может их сравнить и понять, что появилась новая свеча
IF CHETCHIKCIKLOVMAP1 != CHETCHIKCIKLOVMAP2 FLAGCDELOK = 0 END IF' собственно, здесь это проверятся, FLAGCDELOK = 0 давая возможность циклу IF совершать новую сделку
CHETCHIKCIKLOV = CHETCHIKCIKLOV + 1' увеличивается счетчик количества проходов всей программы в течении дня, условие CHETCHIKCIKLOV > 2 необходимо для того, чтобы в CHETCHIKCIKLOVMAP гарантировано попали минимум 2 значения для их сравнения
И вот в CHETCHIKCIKLOV проблема. Дело в том, что при ручном отрабатывание всей программы в режиме отладчика все идет хорошо, CHETCHIKCIKLOV, как ему и положено увеличивается с каждым проходом на 1, достигая 3 исполняется условие входа. Но работая в автономном режиме ничего не происходит, CHETCHIKCIKLOV = 0 даже после 20 минут работы программы, хотя должен быть равен, например 50, включая снова режим отладчика все глобальные переменные равны 0, при этом если убрать условие CHETCHIKCIKLOV > 2 все работает. Избавиться совсем от CHETCHIKCIKLOV не получиться, поскольку, если создавать CHETCHIKCIKLOVMAP=CREATE_COLLECTION() вне цикла IF CHETCHIKCIKLOV=0, при каждом проходе программы CHETCHIKCIKLOVMAP будет создаваться снова, удаляя свой пред. вариант, вместе с всего одним значением CHETCHIKCIKLOVMAP1, а CHETCHIKCIKLOVMAP2 вообще никогда не успеет заполняться, и, следовательно, IF CHETCHIKCIKLOVMAP1 != CHETCHIKCIKLOVMAP2 будет выполняться ВСЕГДА, в независимости от кол-во сделок на свече. Прошу помочь мне разобраться, почему так происходит, возможно я не правильно понимаю сам процессы отработки скрипта в qpile
Добрый день, друзья. У меня возникла проблема с количеством исполнения сделок на одну свечку. У меня есть алгоритм для сохранения свечей в коллекцию. Однако у него одна особенность, а именно он сохраняет коллекцию только завершенные свечи, т.е. в коллекцию идут предыдущая свеча и несколько перед ней, а текущая незавершенная не учитывается. Сигнал на вход 2 последовательные свечи одного цвета с неким коротким стопом. Однако если данный вход будет "ложным" и сделку выбьет по стопу, алгоритм тут же войдет снова по рыночной цене, причем стоп может стоять выше покупки, если эта сделка, например, на покупку, а текущая свеча медвежья и имеет более широкий диапазон, чем предыдущая бычья. Выходом может служить знание алгоритма, что на одну свечу можно открывать только одну сделку и если, сделка стопится, то ждать следующую свечу. И вот здесь я никак не могу сообразить. Можно все таки учитывать текущую незавершенную свечку в коллекции, как самую первую с номером 0 например и уже известной ценой open. И как только данной значение open переместится на след. позицию в коллекции с номером 1, то все можно совершать еще одну сделку. И вот как это реализовать не понятно, прошу помощи
в данном конкретном случаи АО2 = -4.92 АО3 = -5.18 АО4 = -5.07
далее создаются такие условия USL3 =7
IF AAO2 < AAO3 < AAO4 т.е сторого по возрастанию USL3 = 1 'ELSE 'USL3 = 3 END IF
IF (AAO2 < AAO3 < AAO4) AND ((AO2 < 0) AND (AO3 < 0) AND (AO4 < 0)) строго по убыванию USL3 = 2 'ELSE 'USL3 = 3 END IF
т.е. если условия не соблюдаются, то должно остаться USL3 =7, как видно условия не соблюдаются, но почему то USL3 =2. Почему так? Помогите понять в чем ошибка, а то уже глаз видимо замылился Интересно еще и то, что если убрать комментарий из 'ELSE 'USL3 = 3, то когда условие все-таки соблюдается, то через отладку видно, что сначала USL3 принимает значение исходя из условия, а на следующем шаге становиться USL3 =3, т. е. ELSE не пропускается, а исполняется. Вообщем мне совсем понятно, что происходит