Автор |
Сообщение |
burga
Зарегистрирован: 04.09.2009
Сообщения: 23
|
Нашел следующую проблему: при вызове скрипта между фигурных скобок не передаются внутрь скрипта значения переменных:
Так работать будет:
MyValue = 1234.0;
EnableScript("vbscript");
<MyValue>
А вот так не будет:
{
MyValue = 1234.0;
EnableScript("vbscript");
<MyValue>
}
Т.е. я не могу вызывать скрипты из блоков кода, например условий или описанных мною функций.
Никто не находил решение этой проблемы? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
UP!!! Начал рыть сегодня своего робота. Столкнулся с такой проблемой. Есть следующий код:
Код: |
EnableScript("vbscript");
FileExcel = "C:/stats.xls";
function DDETable_read(ordrnumber)
{
<%
Option explicit
Dim ordrnumber, i, temp
Dim Excel, ExcelPath, SheetRobot
Dim NameSheet, OrderExcel, OrderStatusExcel
ordrnumber = AFL("ordrnumber")
MsgBox(ordrnumber )
ExcelPath = AFL("FileExcel")
NameSheet = "Orders"
temp = "NO MATCH"
Set Excel = GetObject(ExcelPath)
Set SheetRobot = Excel.WorkSheets(NameSheet)
for i = 2 to 100
OrderExcel = SheetRobot.Cells(i,2).Value
if (OrderExcel = ordrnumber ) then
OrderStatusExcel = SheetRobot.Cells(i,11).Value
temp = "MATCH"
MsgBox(OrderExcel)
exit for
end if
Next
AFL("temp") = temp
AFL("ordrstatus") = OrderStatusExcel
%>
_TRACE(temp);
_TRACE(ordrstatus);
return ordrstatus;
}
LastOrderStatus = DDETable_read("3132969121");
|
Смысл кода - вызываем функцию, которая считывает таблицу Excel, экспортированную по DDE квиком, и получает статус посланной заявки.
Проблема в том, что значения переменных из AFL в скрипт НЕ передаются. Я там в коде спецом понаставил мессадж-боксов для мониторинга переменных - везде пусто
Однако. Если сделать такой код:
Код: |
EnableScript("vbscript");
FileExcel = "C:/stats.xls";
ordrnumber = 3132969121;
<%
Option explicit
Dim ordrnumber, i, temp
Dim Excel, ExcelPath, SheetRobot
Dim NameSheet, OrderExcel, OrderStatusExcel
ordrnumber = AFL("ordrnumber")
MsgBox(ordrnumber )
ExcelPath = AFL("FileExcel")
NameSheet = "Orders"
temp = "NO MATCH"
Set Excel = GetObject(ExcelPath)
Set SheetRobot = Excel.WorkSheets(NameSheet)
for i = 2 to 100
OrderExcel = SheetRobot.Cells(i,2).Value
if (OrderExcel = ordrnumber ) then
OrderStatusExcel = SheetRobot.Cells(i,11).Value
temp = "MATCH"
MsgBox(OrderExcel)
exit for
end if
Next
AFL("temp") = temp
AFL("ordrstatus") = OrderStatusExcel
%>
|
То все прекрасно работает, передается и считывает. Народ, кто-нить знает как обойти этот косяк? Очень надо вызывать скрипт именно в коде функций. SOS! |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Или у нас вариант ODBC только остается для считывания таблиц квика? В этом случае не требуется юзать этот VBScript? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
по VBScript к сожалению подсказать не смогу. Совершенно точно если передавать данные по ODBC, то скрипт не нужен.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Написал в саппорт Ами по поводу этой баги - посмотрим что ответят. То что это их косяк не вызывает никаких сомнений. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Кароч, проблема решена! Благодаря доке http://www.amibroker.com/guide/a_aflcom.html удалось родить следующую весчь:
Код: |
// функция считывания эксель-таблицы с текущими заявками: по афл получает строку с номером заявки, преобразует ее в число после чего отсылает строку со статусом заявки
<%
Option explicit
function DDETable_read1()
Dim ordrnumber, i
Dim Excel, ExcelPath, SheetRobot
Dim NameSheet, OrderExcel, OrderStatusExcel
ordrnumber = AFL("lastOrderNum1")
ordrnumber = CDbl(ordrnumber )
ExcelPath = AFL("FileExcel")
NameSheet = "Orders"
Set Excel = GetObject(ExcelPath)
Set SheetRobot = Excel.WorkSheets(NameSheet)
for i = 2 to 100
OrderExcel = SheetRobot.Cells(i,2).Value
if (OrderExcel = ordrnumber ) then
OrderStatusExcel = SheetRobot.Cells(i,11).Value
MsgBox(OrderStatusExcel)
exit for
end if
Next
AFL("LastOrderStatus1") = OrderStatusExcel
End function
%>
lastOrderNum1= "3132969121";
script = GetScriptObject();
script.DDETable_read1();
|
То бишь пишем функцию на VBScript внутри скобок <% %> , далее ее вызываем с помощью конструкции
script = GetScriptObject();
script.Function();
Единственное почему то не получилось прям в скобках функции передавать аргументы, решено по старинке через AFL() передавать.
Ксать! Если кто-то помнит, был косяк с амишной функцией перевода длинной строки-числа в число - последние пара цифр отличалась постоянно. В VBScript эта проблема легко решается использованием функции CDbl(string). |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
spitfire писал(а): |
Кароч, проблема решена! |
Слушай, а Excel не сильно тормозит процесс и много ли памяти тратится? Я тут подумал, что вывод в Excel существует у многих брокеров. И не только состояния заявок и позиций. Допустим, выводим в Excel по ДДЕ данные по ESminiSP из MetaTrader4 и твоей функцией считываем в Composite, из другой таблицы, настроенной на OpenECry, считываем что-то ещё, из третьей заявки, из четвертой..., а Дата-плагин настроен на быстрые данные от брокера( КВИК, Смарт, ...) так сказать мультисборник данных от разных поставщиков. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Я буквально только вчера написал все функции робота и буду их тестить на неделе... Я еще даже не проверял связь Екселя и Квика по ДДЕ Напишу сюда как проверю все. По идее наверное оч сильно все зависит от объема выводимых данных, мне же надо только таблицу с заявками выводить что точно мало жрет ресурсов - у меня не hft.. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
spitfire писал(а): |
Я еще даже не проверял связь Екселя и Квика по ДДЕ По идее наверное оч сильно все зависит от объема выводимых данных, мне же надо только таблицу с заявками выводить что точно мало жрет ресурсов - у меня не hft.. |
Интересует проверка связи Екселя и Ами, т.к. у Екселя и Квика, Екселя и МТ4, Екселя и ОпенЕКрай (красиво русскими буквами звучит), всё проверено, перепроверено. У меня Смарт-Ексель зависал наглухо из-за неспособности Екселя принять по ДДЕ данные. Я думал что-то изменилось. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|