Вот такой еще вариант (без ручек)
//+------------------------------------------------------------------+ //| GetAllMarketInfo.mq4 | //| версия 0.0.0.1 | //| igorkaisa@gmail.com | //+------------------------------------------------------------------+ #include <WinUser32.mqh> #import "kernel32.dll" int _lclose (int); int _lopen (string,int); int _llseek (int,int,int); int _lread (int,string,int); #import int start() { int sectorSize = 1936; int fileHandle =_lopen(TerminalPath()+"\\history\\"+AccountServer()+"\\symbols.raw",0); int symbolCount =_llseek(fileHandle,0,2)/sectorSize; string symbolName = "123456789012"; for(int i=0; i<symbolCount; i++) { _llseek(fileHandle,i*sectorSize,0); _lread (fileHandle,symbolName,12); Print ( symbolName,";", MarketInfo(symbolName,MODE_SPREAD),";", MarketInfo(symbolName,MODE_SWAPLONG),";", MarketInfo(symbolName,MODE_SWAPSHORT) // добавить кому что нужно или вообще в файл записывать ); } Print("Символов: ", symbolCount); _lclose(fileHandle); return(0); }
CFD Live Cattle, Euro vs US Dollar и т.д...
я и спрашивал
реализовать можно, на C++ получается,
а на MQL со строками ихними малость запутался...
так то черновой вариант есть
просто хочется не только "изящного хода" но и изящного кода
Здорово! Все-таки расковырял!
Игорь, интересует Ваше мнение и если возможно помощь.
При обратном процессе(не прочитать, а изменить) эти изменения повлияют на работу тестера?
Сам не смогу это проверить. Помогите со скриптом, пожалуйста.
Блин... :((( чёт не хочет скрипт листать...
В алерте всё ок, считает, видит и т.д...
а вот в например в рабочем скрипте не хочет.
-
Там вместо ручного ввода списка символов решил загонять автоматом,
предварительно "нагрузив" массив siMS из файла...
//+------------------------------------------------------------------+ //| 02.04.2006 Скрипт для выгрузки информации о символах. | //+------------------------------------------------------------------+ #property show_inputs #include <WinUser32.mqh> #import "kernel32.dll" int _lclose (int); int _lopen (string,int); int _llseek (int,int,int); int _lread (int,string,int); #import int handle; //------- Внешние параметры скрипта ---------------------------------+ extern string siFileName = "SymbolInfo.csv"; extern string siSeparator = "."; //--- string siMS[]; //------- как это было в исходном варианте -----------------------------+ /* string siMS[15]={ "AFLRUR", "AUDCAD", "AUDCHF" }; */ //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void start() { int sectorSize = 1936; int fileHandle =_lopen(TerminalPath()+"\\history\\"+AccountServer()+"\\symbols.raw",0); int symbolCount =_llseek(fileHandle,0,2)/sectorSize; string symbolName = "123456789012"; for(int i=0; i<symbolCount; i++) { _llseek(fileHandle,i*sectorSize,0); _lread (fileHandle,symbolName,12); siMS[i]="\""+symbolName+"\""; } _lclose(fileHandle); //--------------- string st; FileDelete(siFileName); st=";"+TimeToStr(LocalTime(), TIME_DATE)+";"+AccountCompany(); WritingLineInFile(siFileName, st); WritingLineInFile(siFileName, ""); st="№;Символ;Рынок;BUY;SELL;Спрэд;Стопы;Контракт;Маржа"; WritingLineInFile(siFileName, st); for (i=0; i<ArraySize(siMS); i++) { st=DoubleToStr(i+1, 0)+";"+ //№ п.п. siMS[i]+";"+ // Символ DoubleToStr(MarketInfo(siMS[i], MODE_MARGINCALCMODE),0)+";"+ // Рынок DoubleToStr(MarketInfo(siMS[i], MODE_SWAPLONG), 2)+";"+ // Бай своп DoubleToStr(MarketInfo(siMS[i], MODE_SWAPSHORT), 2)+";"+ // Селл своп DoubleToStr(MarketInfo(siMS[i], MODE_SPREAD), 0)+";"+ // Спред DoubleToStr(MarketInfo(siMS[i], MODE_STOPLEVEL), 0)+";"+ // Стопы DoubleToStr(MarketInfo(siMS[i], MODE_LOTSIZE), 0)+";"+ // Обьём лота DoubleToStr(MarketInfo(siMS[i], MODE_MARGINREQUIRED), 2); // Маржа if (siSeparator!=".") st=StrTran(st, ".", siSeparator); WritingLineInFile(siFileName, st); Alert("s: ",siMS[i]," k: ",1); } Comment("Сформирован файл: "+siFileName); } //+------------------------------------------------------------------+ //| Замена подстроки | //| Параметры: | //| str - текстовая строка, в которой производится замена | //| strfrom - заменяемая подстрока | //| strto - заменяющая подстрока | //+------------------------------------------------------------------+ string StrTran(string str, string strfrom, string strto) { int n; string outstr="", tempstr; for (n=0; n<StringLen(str); n++) { tempstr=StringSubstr(str, n, StringLen(strfrom)); if (tempstr==strfrom) { outstr=outstr+strto; n=n+StringLen(strfrom)-1; } else outstr=outstr+StringSubstr(str, n, 1); } return(outstr); } //+------------------------------------------------------------------+ //| Запись строки в файл | //+------------------------------------------------------------------+ void WritingLineInFile(string FileName, string text) { int file_handle=FileOpen(FileName, FILE_READ|FILE_WRITE, " "); if (file_handle>0) { FileSeek(file_handle, 0, SEEK_END); FileWrite(file_handle, text); FileClose(file_handle); } } //+------------------------------------------------------------------+
Упс... дополнение...
//--- было... string siMS[]; // сделал так, вроде заработало, правда всего 15 символов string siMS[15];
но ведь количество символов как-бы неизвестно заранее...
Как сделать этот размер резиновым?
hi,
ты бы лучше объяснил, что хочешь, а то кусок отсюда, кусок оттуда.
о, новый термин "резиновый" суть то конечно правильная
Хм... ну скрипт Игоря Ким вроде не диковнка, и назначен для генерации таблицы свойств сиволов.
Единственым неудобным моментом было (и пока есть...) это прописка вручную этих самых символов.
Вроде и не проблема, но!
- зависимость от ДЦ
- зависимость от "сезонных" символов
- зависимость от вновь вводимых символов
- да и просто неудобно в составлении списка вручную
*
Вот и вся недолга с этими кусками оттуда и оттуда... :)))
Хотя кусками это сложно назвать, ибо скрипт Кима практически весь,
за исключением массива siMS который из "ручного" заполнения
переведён в "автоматический" кодом GetAllMarketInfo.
*
Как вариант реализации, генератор хтмл-таблицы нацарапаный мной.
Зависимости всё те-же и хотелось бы от них избавиться...
хорошо переварю и напишу а то у нас в омске уже ночь
сегодня уже думать не хочется
Ну вотЪ... родил...
Правда есть ещё где что поправить почистить, но уже работает!
*
Теперь на следующую версию разработать сортировку, хотя бы одну.
*
Посмотреть тестовую страницу...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Проектов на вывод списка торговых инструментов встечал несколько,
от простого вбивания в скрипт руками, до перебора по литерам...
Или чтением из файла, как например этот:
'SymbolList fromSet'
Однако вот что подумалось работая с другим направлением,
чтением и копированием файлов вне терминальной корзины.
'Файловые операции в MQL4 без ограничений'
А что если...
Читать данные прямо из папки ..\symbolsets
БЕЗ создания\копирования промежуточного файла!
Хоть без ручек не обойтись и в этом случае, однако гораздо проще и без лишних телодвижений
в обзоре рынка показать все символы и сохранить под нужным именем, например 05052008.set