Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Косяк с вызовом vb-скриптов Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
burga



Зарегистрирован: 04.09.2009
Сообщения: 23

СообщениеДобавлено: Чт Дек 03, 2009 8:39 am Ответить с цитатой Вернуться к началу

Нашел следующую проблему: при вызове скрипта между фигурных скобок не передаются внутрь скрипта значения переменных:

Так работать будет:

MyValue = 1234.0;
EnableScript("vbscript");
<MyValue>


А вот так не будет:

{
MyValue = 1234.0;
EnableScript("vbscript");
<MyValue>
}

Т.е. я не могу вызывать скрипты из блоков кода, например условий или описанных мною функций.

Никто не находил решение этой проблемы?
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Июн 01, 2011 12:51 pm Ответить с цитатой Вернуться к началу

UP!!! Evil or Very Mad Начал рыть сегодня своего робота. Столкнулся с такой проблемой. Есть следующий код:
Код:

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 в скрипт НЕ передаются. Я там в коде спецом понаставил мессадж-боксов для мониторинга переменных - везде пусто Exclamation
Однако. Если сделать такой код:
Код:

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

СообщениеДобавлено: Ср Июн 01, 2011 12:56 pm Ответить с цитатой Вернуться к началу

Или у нас вариант ODBC только остается для считывания таблиц квика? В этом случае не требуется юзать этот VBScript?
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Июн 01, 2011 8:42 pm Ответить с цитатой Вернуться к началу

по VBScript к сожалению подсказать не смогу. Совершенно точно если передавать данные по ODBC, то скрипт не нужен....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Чт Июн 02, 2011 12:49 pm Ответить с цитатой Вернуться к началу

Написал в саппорт Ами по поводу этой баги - посмотрим что ответят. То что это их косяк не вызывает никаких сомнений.
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Пт Июн 03, 2011 12:21 pm Ответить с цитатой Вернуться к началу

Кароч, проблема решена! Благодаря доке 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() передавать.

Ксать! Idea Если кто-то помнит, был косяк с амишной функцией перевода длинной строки-числа в число - последние пара цифр отличалась постоянно. В VBScript эта проблема легко решается использованием функции CDbl(string).
Посмотреть профиль Отправить личное сообщение ICQ Number
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Вт Июн 07, 2011 3:34 pm Ответить с цитатой Вернуться к началу

spitfire писал(а):
Кароч, проблема решена!

Слушай, а Excel не сильно тормозит процесс и много ли памяти тратится? Я тут подумал, что вывод в Excel существует у многих брокеров. И не только состояния заявок и позиций. Допустим, выводим в Excel по ДДЕ данные по ESminiSP из MetaTrader4 и твоей функцией считываем в Composite, из другой таблицы, настроенной на OpenECry, считываем что-то ещё, из третьей заявки, из четвертой..., а Дата-плагин настроен на быстрые данные от брокера( КВИК, Смарт, ...) так сказать мультисборник данных от разных поставщиков.
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Вт Июн 07, 2011 5:10 pm Ответить с цитатой Вернуться к началу

Я буквально только вчера написал все функции робота и буду их тестить на неделе... Я еще даже не проверял связь Екселя и Квика по ДДЕ Smile Напишу сюда как проверю все. По идее наверное оч сильно все зависит от объема выводимых данных, мне же надо только таблицу с заявками выводить что точно мало жрет ресурсов - у меня не hft..
Посмотреть профиль Отправить личное сообщение ICQ Number
belin



Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user

СообщениеДобавлено: Вт Июн 07, 2011 7:43 pm Ответить с цитатой Вернуться к началу

spitfire писал(а):
Я еще даже не проверял связь Екселя и Квика по ДДЕ Smile По идее наверное оч сильно все зависит от объема выводимых данных, мне же надо только таблицу с заявками выводить что точно мало жрет ресурсов - у меня не hft..

Интересует проверка связи Екселя и Ами, т.к. у Екселя и Квика, Екселя и МТ4, Екселя и ОпенЕКрай (красиво русскими буквами звучит), всё проверено, перепроверено. У меня Смарт-Ексель зависал наглухо из-за неспособности Екселя принять по ДДЕ данные. Я думал что-то изменилось.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen