Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 258

 
mzk_3om6u:


Я всё же не понимаю, что куда вставлять, и как написан скрипт тоже не особо ясно:(

experts/files/trx_rowa.vbs

Это злобный, небритый, неизвестный науке троян. Дэвлалэ, у вас гугол на расстоянии мышки, разобраться в исходнике религия не позволяет? Поменяйте IE.visible = false на IE.visible = true, запустите и посмотрите. Скрипт парсит ваш календарь и записывает всё что на кириллице в текстовый файл. Откройте и гляньте, всё нормально читается.

 
gyfto:

experts/files/trx_rowa.vbs

Это злобный, небритый, неизвестный науке троян. Дэвлалэ, у вас гугол на расстоянии мышки, разобраться в исходнике религия не позволяет? Поменяйте IE.visible = false на IE.visible = true, запустите и посмотрите. Скрипт парсит ваш календарь и записывает всё что на кириллице в текстовый файл. Откройте и гляньте, всё нормально читается.


'On Error Resume Next
Dim IE : Set IE = WSCript.CreateObject("InternetExplorer.Application")
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim fTxtName : fTxtName = Left(WSCript.ScriptFullName,len(WSCript.ScriptFullName)-3) & "txt"
Set TxtFile = objFSO.OpenTextFile(fTxtName, 2, True)'открываем файл для записи
IE.visible = false' браузер в фоновом режиме
IE.navigate "http://www.fxteam.ru/forex/economic-calendar/2013_49.html"
Do While IE.Busy
        WSCript.Sleep 500
loop
Do While IE.document.getElementsByClassName("tr1 rowa").Item(0).getElementsByTagName("TD").Item(4) is Nothing' пока этот элемент страницы не загрузится
        WSCript.Sleep 500' будем ждать загрузки страницы
loop
Set tr1_rowa = IE.document.getElementsByClassName("tr1 rowa")
For i = 0 to tr1_rowa.length - 1
        TxtFile.WriteLine tr1_rowa.Item(i).getElementsByTagName("TD").Item(4).InnerText
Next
Set tr0_rowa = IE.document.getElementsByClassName("tr0 rowa")
For i = 0 to tr0_rowa.length - 1
        TxtFile.WriteLine tr0_rowa.Item(i).getElementsByTagName("TD").Item(4).InnerText
Next
Set IE = Nothing' закрываем браузер
TxtFile.Close
WSCript.Quit()

я же серьёзно не понимаю, что это за текст куда его вставлять. Давайте сначала,

1. Я могу скачать сайт в файл.

2. Дальше варианты:

2а) Прогнать его через функцию перекодировки(не читаемые символы пропадут, и в журнале будет ошибка - которая раздражает), и парсить русские буквы(раздражают ошибки, в журнале, но на работу они не влияют).

2б) Оставить всё как есть, и немного помучатся с ключевыми словами(типа monday = "Понедельник"), и так же вытащить информацию.

2в) Написать функцию, которая переводит "Понедельник" в "Понедельник", и так же вытащить что надо.

Попробовал написать функцию, но что-то я явно не знаю про кодировки:) Вот что у меня вышло, ниже оригинал.

string win_utf8(string s) { 
   string outputi = "";
   string other1 = "Ё";
   string other2 = "ё";
   string other3 = "Є";
   string other4 = "є";
   string other5 = "I";
   string other6 = "i";
   string other7 = "Ї";
   string other8 = "ї";
   for (int i = 0; i < StringLen(s); i++)
   {
      if (StringGetChar(s,i) > 191) 
      {
         int output=StringGetChar(s,i)+848;
      }
         else 
         {
            if (StringSubstr(s,i,1) != other1)output=StringGetChar(s,i);
            else output=1025; 
            if (StringSubstr(s,i,1) != other2)output=StringGetChar(s,i);
            else output=1105; 
            if (StringSubstr(s,i,1) != other3)output=StringGetChar(s,i);
            else output=1028; 
            if (StringSubstr(s,i,1) != other4)output=StringGetChar(s,i);
            else output=1108; 
            if (StringSubstr(s,i,1) != other5)output=StringGetChar(s,i);
            else output=1030; 
            if (StringSubstr(s,i,1) != other6)output=StringGetChar(s,i);
            else output=1110; 
            if (StringSubstr(s,i,1) != other7)output=StringGetChar(s,i);
            else output=1031; 
            if (StringSubstr(s,i,1) != other8)output=StringGetChar(s,i);
            else output=1111; 
            }
   outputi=outputi+StringSetChar("",0,output);
   }
   
   return (outputi);
}
function win_utf8($in_text) { 
   $output = "";
   $other[1025] = "Ё";
   $other[1105] = "ё";
   $other[1028] = "Є";
   $other[1108] = "є";
   $other[1030] = "I";
   $other[1110] = "i";
   $other[1031] = "Ї";
   $other[1111] = "ї";
   for ($i = 0; $i < strlen($in_text); $i++){
      if (ord($in_text{$i}) > 191) {
         $output.="&#".(ord($in_text{$i})+848).";";
      }else {
         if (array_search($in_text{$i}, $other)===false){
            $output.=$in_text{$i};
         }else {
            $output.="&#".array_search($in_text{$i}, $other).";";
         }
      }
   }
   return $output;
}
 
mzk_3om6u:

я же серьёзно не понимаю, что это за текст куда его вставлять.


Я там раскомментил, смотрите. Этот код копипастите в блокнот, блокнот сохраняете как trx_rowa.vbs (не txt), получаете vbs-скрипт. Переносите скрипт в экспертс-файлы. Можете сначала проверить, запустить, можете сразу писать его вызов с mql4-кода. Как вызывать, привёл. Он создаёт txt-файл с таким же названием, как и сам, и там вся ваша кириллица. Единственное, sleep у вас с индюка не вызовется, надо выкручиваться. Можно вот так:

datetime myTimer = TimeCurrent() + 60;
while(TimeCurrent() < myTimer){}
//дальше код...

но вряд ли будет работать. На форуме был таймер на WinAPI.

 
gyfto:

Я там раскомментил, смотрите. Этот код копипастите в блокнот, блокнот сохраняете как trx_rowa.vbs (не txt), получаете vbs-скрипт. Переносите скрипт в экспертс-файлы. Можете сначала проверить, запустить, можете сразу писать его вызов с mql4-кода. Как вызывать, привёл. Он создаёт txt-файл с таким же названием, как и сам, и там вся ваша кириллица.


я Вас понял! Спасибо за способ вытаскивания кириллицы, но основная задача - получить время\страну\важность, но важность там идёт как картинка, и её только на латинице можно поймать, а так сохраню себе альтернативный способ качать странички.

Спасибо:)

 
mzk_3om6u:


основная задача - получить время\страну\важность


Время - .getElementsByTagName("TD").item(0).InnerText

страна - .getElementsByTagName("TD").item(1).InnerText

важность - .getElementsByTagName("TD").item(2).InnerHTML, а там уже распознаёте какая цифра находится в строке /i/calendar/impact1.png

 

есть ли какое-то ограничение на использование индикаторов?

если я в советнике использую индикатор - то когда программа заканчивает тестирование - то индикатор отрисовывается.

если один и тот-же индикатор но с разными параметрами - то рисуется два.

я в советники хочу включить индюк с динамическими параметрами - советник начал работать крайне медленно а при остановке вместо графика показывает армагедец (30 подключеных индикаторов - столько может отобразить на графике).

вопрос в том что если он отображает только 30 - внутри скрипта понимает ли он остальные?

 
tiiga:

есть ли какое-то ограничение на использование индикаторов?

если я в советнике использую индикатор - то когда программа заканчивает тестирование - то индикатор отрисовывается.

если один и тот-же индикатор но с разными параметрами - то рисуется два.

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

перенесите основную функцию индикатора в советник - и быстрее работать будет и отсутствие армагедца.

Перенос кода индикатора в код эксперта. Строение индикатора.

Перенос кода индикатора в код эксперта. Общие схемы строения эксперта и индикаторных функций

Перенос кода индикатора в код эксперта. Заключение
 
спасибо! чтото ссылка ваша не щёлкается
 
tiiga:

есть ли какое-то ограничение на использование индикаторов?

если я в советнике использую индикатор - то когда программа заканчивает тестирование - то индикатор отрисовывается.

если один и тот-же индикатор но с разными параметрами - то рисуется два.

я в советники хочу включить индюк с динамическими параметрами - советник начал работать крайне медленно а при остановке вместо графика показывает армагедец (30 подключеных индикаторов - столько может отобразить на графике).

вопрос в том что если он отображает только 30 - внутри скрипта понимает ли он остальные?


void HideTestIndicators( bool hide)

Функция выставляет флаг скрытия индикаторов, вызываемых экспертом. При открытии графика после тестирования индикаторы, помеченные флагом скрытия, не будут выведены на график тестирования. Перед каждым вызовом индикатор помечается текущим установленным флагом скрытия.
Необходимо отметить, что на график тестирования могут быть выведены только те индикаторы, которые непосредственно вызываются из тестируемого эксперта.
Параметры:
hide - TRUE - если нужно прятать индикаторы, иначе FALSE.
Пример:
   HideTestIndicators(true);
   MaCurrent=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,1);
   HideTestIndicators(false);
 

Как правильно прописать для того,что бы найти процент просадки?

(DoubleToStr(AccountBalance(), 2) - DoubleToStr(AccountFreeMargin(), 2)) * 100