Вопросы по AmiSharp
Подскажите пожалуйста.
Пытаюсь получить значение из таблицы. Создаю фильтр
amisharp.ApplyFilterName(TabParametr,"CODE",Seccode, "vasa");
Создается все правильно таблица vasa. Как и задумано с одной строкой. "Текущая таблица параметров" по одному инструменту. Все отлично.))) Код возврата 1 все правильно, одна строка.
Затем пытаюсь прочитать значение.
result = amispread.GetCellName("vasa","bid",1);
Ami ругается
Error 18. COM object variable is not initialized or has invalid type (valid COM object handle required)
странно
amisharp.ApplyFilterName(TabParametr,"CODE",Seccode, "vasa"); // здесь создает все нормально
result = amispread.GetCellName("vasa","bid",1); // здесь уже не существует
Как так?? Подскажите где ошибка?
В начале я как в примере писал _tabParamFilter1 = TabParametr + "~1"; и подставлял эту переменную.
И в последней версии AmiSharp функция Tables_List = amisharp.ListOfTables(); не работает.
С уважением, Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
TabParametr="[TABparam]-";
error(TabParametr); // печатаю имя таблицы
if (mutant.IsTableExists(TabParametr) == "0") // здесь программа ругается код ошибки 1 ей не нравится переменная . // ТabParametr НО РАБОТАЕТ ДАЛЬШЕ
{ error("Отсутствует экспорт таблицы " + TabParametr+ " по DDE");
StartDDE();
}
// Но данный код работает правильно
_kod_bumagi=StrToNum(amisharp.SearchValueName(TabParametr,"CODE",Seccode,0));
MaxPrice = AmiSharp.GetCellName(TabParametr,"bid",_kod_bumagi);
MinPrice = AmiSharp.GetCellName(TabParametr,"offer",_kod_bumagi);
Error(" Значение MaxPrice "+MaxPrice );
Error(" Значение MinPrice "+MinPrice );
Михаил, подскажите ?????
Ошибки но работает.??? Таким способом значения считываются, предыдущим нет.
Если фильтры работают не надежно, то тогда без них придется делать. А с ними получается красивее))))
Как быть?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
amispread - нет такого объекта. Я так понимаю, объект Вы назвали как amisharp.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Сначала Вы создали объект посредством CreateStaticObject и присвоили ссылку на него какой-то переменной. Вот именно эту переменную нужно указывать перед именем метода.
у Вас же mutant.istableexists и amisahrp.GetCellName - в одной куче
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Подчистил мутантов с амишарпами
Все заработало.
С уважением, Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
ПОБЕДИЛ МУТАНТОВ))))))))))
Писал и еще раз повторюсь.
У Вас отличный подход !!! работая с таблицами через DDE!!!!!!!!
Но есть и грустные моменты (((
Таблицы типа "Таблица параметров", "Позиция по клиентским счетам (фьюч) ", "Ограничение по клиентским счетам (фьюч)" обновляются в AmiSharpe быстро и регулярно. А вот к примеру из Ami снимаю стоп заявку в квике. Снимает махом, но проблема в AmiSharp не обновляется (((. Когда выставляешь все обновляется. А при снятии нет. И висит она в AmiSharp ...
Как быть в такой ситуации?
С уважением, Александр.
Спасибо за помощь, спасибо что не бросили)))))
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Спасибо на добром словеAlexLan пишет: У Вас отличный подход !!! работая с таблицами через DDE!!!!!!!!
Александр, Амишарп не имеет представления, что за таблицу он получает через протокол DDE. Все что ему посылает терминал, то он и получает.Но есть и грустные моменты (((
Таблицы типа "Таблица параметров", "Позиция по клиентским счетам (фьюч) ", "Ограничение по клиентским счетам (фьюч)" обновляются в AmiSharpe быстро и регулярно. А вот к примеру из Ami снимаю стоп заявку в квике. Снимает махом, но проблема в AmiSharp не обновляется (((. Когда выставляешь все обновляется. А при снятии нет. И висит она в AmiSharp ...
Как быть в такой ситуации?
Возможно, Ваша проблема состоит в том, что с момента посылки транзакции на снятие заявки до момента обновления таблицы стоп-заявок квика (и соответствующей таблицы AmiSharp) проходит какое-то время. Электрончикам по проводам ведь нужно добежать до биржи и назад
Это не вопрос амишарпа, это глобальное природное свойство
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Вы писали.
Возможно, Ваша проблема состоит в том, что с момента посылки транзакции на снятие заявки до момента обновления таблицы стоп-заявок квика (и соответствующей таблицы AmiSharp) проходит какое-то время. Электрончикам по проводам ведь нужно добежать до биржи и назад
Какая интересная мысль. Теперь мне понятна физика процесса
И все было бы хорошо и логично )))) но я по первому образованию физик (с большим курсом ядерной физики), и нам много рассказывали про электроны )))
Извините ответ не за считывается))). Может можно как то в AmiSharpe дать команду на вывод (обновление) именно этих таблиц. Получается однобоко, когда ставишь заявку отражается сразу, при удалении не отражается.
С уважением, Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Команда удалить ордер или стоп-заявку проходит. В квике все что нужно удаляет. В AmiSharpe не отображается.
Проведите такой эксперимент, работайте только в квике и смотрите, что отражается в ASh
Создайте ордер в квике, смотрите как он отображается в передаваемой таблице ASh . - все отлично.
Переместите ордер. В таблице значение обновилось!!!!!
Но стоит его удалить в квике, из таблице не удаляется. это плохо.
Я опрашиваю таблицу, вижу ордер, пытаюсь сделать над ним действие, и не могу (((
Как выйти из такой ситуации?
С уважением, Александр.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Но стоит его удалить в квике, из таблице не удаляется. это плохо.
В терминале квик удалить (стоп)-заявку нельзя. Ее можно сделать снятой, а в таблице квика установить фильтр, не показывающий снятые заявки. Вот этот режим не нужно использовать. Не мешайте бегать электронам, одним словом.
Дело в том, что не существует легального способа узнать размеры транслируемой из квика таблицы. Поэтому при увеличении таблицы мы это тривиально видим, а про уменьшение мы узнать не можем никак.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
С Вашей помощью победили "мутантов" ))))) и заставил бегать ленивые электроны))))
Да все как сказал
1. В квике поставил все ордера
2. Сделал фильтр 1 по инструменту
3. Фильтр 2 из Фильтра 1 по "STATUS","ACTIVE" - получил таблицу в одну строчку ))) и считал номер заявки затем удалил.
4. Всякая обвязка на отсутствие таблицы+ если она не создалась. ...
Все работает быстро)))
но функция Tables_List = amisharp.ListOfTables();
так и не работает.
Спасибо за помощь.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
AlexLan пишет: Спасибо за помощь.
М/ф "Жил-был Пес". Голос Джигарханяна: "Ну ты, если шо...... заходи..."
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
"Error 503 ... CreateStaticObject is not multi-threading friendly"
Предлагается использовать какие-то "родные функции AFL" - что можно поделать тут? Пожалуйста, подскажите.
Также ругается на:
return ParameterString + ParameterName + " = " + ParameterValue + ";" ;
P.S.
Я закомментировал следующее:
/* Включаем AmiSharp
amisharp = CreateStaticObject("AmiSharp.Mutant");
amisharp.QuikConnect(QUIK_Path);
*/
Ругаться перестал. Я включил AmiSharp вручную.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
как-то мы с Вами уже обсуждали, что более новое не всегда более лучшее (для наших целей)
Я пользуюсь версией амиброкера 5.4
Версия 5.5 полностью поддерживает многопоточность (5.4 имеет многопоточность на уровне индикатора - нам этого вполне достаточно)
Соответственно, Tomasz Janeczko максимально рекомендует пользователям избавляться от технологии OLE, которая рушит ему всю картину. (все-таки 1990 год разработки OLE технологии): Efficient use of multithreading
Все это, очевидно, верно, да только нет иного (надежного) способа получить таблицы квика и отправить в него транзакции.
К тому же. Насколько я понимаю, Описываемое сообщение представляет собой ворнинг 503 , а не еррор, соответственно, выполнение скрипта должно продолжаться (если не указано обратное в настройках амиброкера)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
AlexLan пишет: функция Tables_List = amisharp.ListOfTables();
так и не работает.
Александр, я так вижу, что Вы вызвали ее без параметров и Амиброкер возражает?
Я с ним согласен.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
1. А какие там должны быть параметры.
(Tables_List = amisharp.ListOfTables(",")
2. АмиSharp работает на Intel 64 разряда?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
AlexLan пишет: Михаил, добрый день.
1. А какие там должны быть параметры.
(Tables_List = amisharp.ListOfTables(",")- раньше такого не было )))
2. АмиSharp работает на Intel 64 разряда?
1. www.bot4sale.ru/faq/amisharp-docs/tables...em/listoftables.html Все течет, все изменяется )))
2. Еще как (если версия 0.147 и выше) ....
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
P S На графике все сигналы отображаются правильно.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А может все и не так, без текстов можно только гадать.
Другое дело, что амишарп здесь просто не при чем. Он про Ваши сигналы (да и вообще про какие-то ни было сигналы) знать ничего не знает. Сигналы - это Ваша забота. Скажете исполнить транзакцию - исполнит...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- genius-1978
- Не в сети
- Захожу иногда
-
- Сообщений: 38
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Со вчерашней проблемой благополучно разобрался, не хватало строчки Amisharp.Mutant. А сейчас вижу вот такую проблему по логам:
07.03.2014 12:30:44 Generate_TransID() = 396
07.03.2014 12:30:44 GetCellName("Tab","offer",1) = 36306
07.03.2014 12:30:44 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=396;SECCODE=SiH4;QUANTITY=1;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00875;TYPE=L;PRICE=36306;") = 0,0,,0,
07.03.2014 12:30:44 TraceLog("c:\z.log") = c:\z.log
В чем может быть проблема?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Судя по логу, амишарп не возвращает никакой диагностики. Такое бывает, если нет возможности передать в квик транзакцию (не говоря уже о возможности получить на нее ответ): не запущен квик, не включены внешние транзакции и т.п.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
if (StrRight(NumToStr(TimeNum()),2) == "50")
{
test = amisharp.QuikIsConnected();
if ( test == "0") amisharp.QuikConnect(QUIK_Path);
}
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- Сестра! Больной перед смертью потел?
- Потел....
- Это хорошо!
Как я понимаю, Вы подключаетесь к терминалу при старте скрипта сразу же. В таком случае лучше установить причину отсоединения амишарпа (trans2quik) от терминала. Самовольных отключений быть не должно.
Можно подключаться к терминалу непосредственно перед посылкой транзакции и отключаться после этого. В принципе это более правильный подход - мало ли кому захочется тоже поговорить с терминалом....
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
amisharp.QuikConnect(QUIK_Path);
trans_result = amisharp.QuikSendSyncTransaction(str);
amisharp.QuikDisconnect();
У меня ощущение, что это подключение не всегда осуществляется корректно, вследствии чего заявка не отправляется, и получается проблема, "девственно чистой заявки".
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
