1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
angular .module("app.data") .controller( "DMDataCtrl", function( $scope, $rootScope, $injector, $timeout, SQEvents, DMDataService, SQConstants, SQWebSocketService, L, AppService ) { $scope.totalRecords = 0; $scope.isQuantDataManager = isQuantDataManager(); var SQFuturesDataService = null; try {SQFuturesDataService = $injector.get("SQFuturesDataService"); } catch(err) {} function initGrid() { $timeout( function() { grid = new sqGrid("dataGrid"); var columns = [{ title: L.tsq("Symbol Name"), type: "text", sort: "text", }, { title: L.tsq("Instrument"), type: "text", sort: "text", }, { title: L.tsq("Broker profile"), type: "text", sort: "text", }, { title: L.tsq("Underlying Symbol"), type: "text", sort: "text", }, { title: L.tsq("Timeframe"), type: "text", sort: "text", }, { title: L.tsq("Timezone"), type: "text", sort: "text", }, { title: L.tsq("Date from"), type: "text", sort: "dateDotted", }, { title: L.tsq("Date to"), type: "text", sort: "dateDotted", }, { title: L.tsq("Total Days"), type: "float2", sort: "number", }, { title: L.tsq("Total Records"), type: "float2", sort: "number", }, { title: L.tsq("Source"), type: "text", sort: "text", }, { title: L.tsq("Bar type"), type: "text", sort: "text", }, { title: L.tsq("Data type"), type: "text", sort: "text", }, { title: L.tsq("Hide"), type: "text", sort: "text", tooltip: L.tsq( "Hide this data in Symbol choice in Builder/Retester/Optimizer" ), }, { title: "", type: "text", }, { title: "", type: "text", sort: "text", }, ]; var widths = [ 140, "9%", "9%", "9%", "5%", "5%", "6%", "6%", "6%", "6%", "6%", "6%", "6%", "4%", "*", 20, ]; grid.defineWidget("progress-bar", sqGridProgressBar); grid.defineWidget("tooltipWidget", sqGridTooltip); grid.defineWidget("checkboxWidget", sqGridCheckbox); grid.setFirstColumnAsId(true, false); grid.enableCheckboxes(true, false); grid.setColumns(columns, !!grid); grid.setWidths(widths, !!grid); grid.setEmptyGridText(L.tsq("No data defined.")); grid.onCellClick = function(row, col) { $scope.selectedRow = grid.getRowId(row); rowsSelected(); }; grid.onCellDoubleClick = function(row) { $scope.selectedRow = grid.getRowId(row); callAction("edit", row); }; grid.cellEventHandler = function( rowIndex, cellIndex, eventName, args ) { var actionLink = grid.getUserData(rowIndex, "actionLink"); if (eventName == "actionStop") { if (confirm(L.tsq("Do you really want to stop?"))) { DMDataService.callAction( actionLink, grid.getRowId(rowIndex), "stop" ); } } else if (eventName == "actionPause") { DMDataService.callAction( actionLink, grid.getRowId(rowIndex), "pause" ); } else if (eventName == "actionContinue") { DMDataService.callAction( actionLink, grid.getRowId(rowIndex), "continue" ); } else { callAction(eventName, args[0], args); } }; grid.setFirstColumnAsId(true, false); reloadDataGrid(); rowsSelected(); $scope.filter.onSearch(); grid.setSort(0, false); }, 0, false ); } function rowsSelected() { SQEvents.notifyListeners(SQEvents.get("DATA_ITEMS_SELECTED"), { rowIds: getSelectedIDs(), grid: grid, }); } function getSelectedIDs() { if (!grid) return ""; var data = grid.getSelectedRows().selectedRowsData; var ids = ""; for (var i = 0; i < data.length; i++) { ids += (i == 0 ? "" : ",") + data[i][0]; } return ids; } $scope.tab.getSelectedRows = function() { return { rows: getSelectedSymbols(), grid: grid, }; }; $scope.tab.callAction = function(actionName) { callAction(actionName); }; $scope.callAction = function(actionName) { callAction(actionName); }; $scope.onAddBr = function (form) { console.log(form); if (form) { $scope.errors = validate(form); if ($scope.errors) { console.error($scope.errors); return; } } if ($scope.brConfig.brAgreed==false) { $rootScope.showError(L.tsq("Please read and agree to StrategyQuant Data Usage Conditions")); return; } $scope.brConfig.symbols = getSelectedBmfTickers(); if (!$scope.brConfig.symbols) { $rootScope.showError(L.tsq("No tickers selected")); return; } $rootScope.setProgressInfo(L.tsq('SQ BMF Data'), L.tsq("Adding symbols..."), 0, function() { SQFuturesDataService.addCancel(); }, true); SQFuturesDataService.add($scope.brConfig); hidePopup('#brFuturesDataModal'); } function getSelectedBmfTickers() { var tickers = ""; for (var i = 0; i < brGrid.getNumberOfRows(); i++) { if (brGrid.isRowChecked(i)) { tickers += brGrid.getCellValue(i, 0) + ","; } } if (tickers) tickers = tickers.substr(0, tickers.length - 1); return tickers; } function printBarType(barType) { var text = "N/A"; switch (barType) { case $scope.barDataTypes.startOfBar: text = L.tsq( "Timestamp represents start of bar time (MetaTrader, Dukascopy, forex data)" ); break; case $scope.barDataTypes.endOfBar: text = L.tsq( "Timestamp represents end of bar time (NinjaTrader, Tradestation, futures data)" ); break; } return text; } function performRemove(symbols) { var data = DMDataService.getSymbolsWithConnections(symbols); DMDataService.removeData(data); if (symbols.length >= 5) { //removing 5 and more symbols is performed async batchOperation = "removed"; $rootScope.setProgressInfo( L.tsq("SQ Data"), L.tsq("Removing data..."), 0, function() { DMDataService.cancelDataOperation(); }, true ); } } function updateBrData(){ SQFuturesDataService.updateBr(); } function addBrData(){ SQFuturesDataService.lookup( { exchange: 100000, postfix: "", symbols: null, searchInName: true, searchInTicker: true, onlyContFutures: true } ,function(data){ showPopup("#brFuturesDataModal"); brGrid = new sqGrid("brDataGrid"); var columns = [ { title: L.tsq('Ticker'), type: "text", sort: 'text' }, { title: L.tsq('Name'), type: "text", sort: 'text' }, { title: L.tsq('Exchange'), type: "text", sort: 'text' }, { title: L.tsq('Data from'), type: "text", sort: 'text' }, ]; var widths = [100, "*", 80, 100]; brGrid.setFirstColumnAsId(true, false); brGrid.setColumns(columns, !!brGrid); brGrid.setWidths(widths, !!brGrid); brGrid.setEmptyGridText(L.tsq('No tickers found.')); brGrid.enableCheckboxes(true); brGrid.headerRedraw(); brGrid.onSelectionChanged = function (selected) { $timeout(function () { $scope.tickersSelected = brGrid.checkedRows.length; }, 100); }; brGrid.bodyRedraw(); loadToArray($scope.brTickers, data.tickers); $scope.lookedup = true; for (var i = 0; i < $scope.brTickers.length; i++) { var allowed = $scope.brTickers[i][4]; var rowData = $scope.brTickers[i]; rowData.pop(); brGrid.addRow(rowData, true); if (!allowed) { brGrid.setRowDisabled(i, true); } } $timeout(function () { brGrid.setNewDimensions(); brGrid.headerRedraw(); brGrid.bodyRedraw(); }, 0); }); } function callAction(actionName, rowIndex, args) { rowIndex = parseInt(rowIndex); var symbols = getSelectedSymbols(rowIndex); if (actionName != "updateall" && actionName != "load" && actionName != 'brData' && actionName!='brDataUpdate') { if (symbols.length == 0) { $rootScope.showError(L.tsq("You have to select a symbol.")); return; } symbols = DMDataService.filterSymbolsInProgress(symbols, grid); if (symbols.length == 0) { return; } } switch (actionName) { case "brData": addBrData(); break; case "brDataUpdate": updateBrData(); break; //---------------------------------------------------------------------------- case "edit": $scope.dataDetails = symbols[0]; $scope.dataDetails.barTypeText = printBarType( $scope.dataDetails.barType ); $scope.instrumentEditable = true; $scope.instrumentChooser.setSymbol($scope.dataDetails.symbol); $scope.instrumentChooser.selectInstrument( $scope.dataDetails.instrument ); $scope.instrumentChooser.reset(); $scope.dataDetails.symbolNew = $scope.dataDetails.symbol; showPopup("#editSymbolModal"); break; //---------------------------------------------------------------------------- case "delete": var count = symbols.length; if (count > 1) { $scope.dataDeleteConfirmText = L.tsq( "Do you want to remove selected symbols (%d) or only clear their data ?", [count] ); } else { $scope.dataDeleteConfirmText = L.tsq( "Do you want to remove symbol '%s' or only clear its data ?", [symbols[0].symbol] ); } showPopup("#dataDeleteConfirmPopup"); break; //---------------------------------------------------------------------------- case "deleteconfirm": hidePopup("#dataDeleteConfirmPopup"); var clonedData = clonedDataExists(symbols); if (clonedData) { var sourceSymbols = listSourceSymbols(symbols); $rootScope.showConfirm( L.tsq("Delete data"), L.tsq( "Data '%s' are used as source for some cloned data.
If you'll delete them you will be not able to update the cloned data.
Do you really want to delete them ?", [sourceSymbols] ), function(confirmed) { if (confirmed) { performRemove(symbols); } }, true, null, null, true ); } else { performRemove(symbols); } break; //---------------------------------------------------------------------------- case "clear": hidePopup("#dataDeleteConfirmPopup"); if (symbols.length == 0) { $rootScope.showError(L.tsq("You have to select some symbol.")); return; } var clonedData = clonedDataExists(symbols); if (clonedData) { var sourceSymbols = listSourceSymbols(symbols); $rootScope.showConfirm( L.tsq("Clear data"), L.tsq( "Data '%s' are used as source for some cloned data.
If you'll delete them you will be not able to update the cloned data.
Do you really want to delete them ?", [sourceSymbols] ), function(confirmed) { if (confirmed) { var data = DMDataService.getSymbolsWithConnections(symbols); DMDataService.clearData(data); } }, true, null, null, true ); } else { var data = DMDataService.getSymbolsWithConnections(symbols); DMDataService.clearData(data); } if (symbols.length >= 5) { //clearing 5 and more symbols is performed async batchOperation = "cleared"; $rootScope.setProgressInfo( L.tsq("SQ Data"), L.tsq("Clearing data..."), 0, function() { DMDataService.cancelDataOperation(); }, true ); } break; case "updateall": DMDataService.updateAll(); break; case "updateSelected": var data = DMDataService.getSymbolsWithConnections(symbols); DMDataService.updateSelected(data); break; case "checkboxChecked": var data = symbols[0]; data.show = !args[2]; for(var i =0;i<$scope.currentData.length;i++){ if ($scope.currentData[i].symbol==data.symbol){ $scope.currentData[i].show = data.show; break; } } DMDataService.showData(data); break; //---------------------------------------------------------------------------- case "save": console.log("Save data"); if (symbols.length == 0) { $rootScope.showError( L.tsq("You have to select at least one symbol.") ); return; } var data = DMDataService.getSymbolsWithConnections(symbols); $rootScope.saveFile( L.tsq("Select file"), { name: "xml", description: "XML Files" }, "SaveData", "Data.xml", null, function(targetPath) { data.filePath = targetPath; DMDataService.save(data); } ); break; //---------------------------------------------------------------------------- case "load": console.log("Load data"); var data = {}; var fileExtension = { name: "xml", description: "XML Files" }; $rootScope.showFilePicker( L.tsq("Select file"), "LoadData", true, false, null, fileExtension, null, function(paths) { if (paths) { data.filePath = paths[0]; DMDataService.load(data); } }); break; } try { $scope.$digest(); } catch (err) {} } function clonedDataExists(symbols) { for (var i_symbol = 0; i_symbol < symbols.length; i_symbol++) { for (var i_row = 0; i_row < grid.getNumberOfRows(); i_row++) { var sourceDataId = grid.getUserData(i_row, "sourceDataId"); if (sourceDataId == symbols[i_symbol].id) { return symbols[i_symbol].symbol; } } } } function listSourceSymbols(symbols) { var sourceSymbols = []; for (var i_symbol = 0; i_symbol < symbols.length; i_symbol++) { for (var i_row = 0; i_row < grid.getNumberOfRows(); i_row++) { var sourceDataId = grid.getUserData(i_row, "sourceDataId"); if ( sourceDataId == symbols[i_symbol].id && !sourceSymbols.includes(symbols[i_symbol].symbol) ) { sourceSymbols.push(symbols[i_symbol].symbol); } } } return sourceSymbols.toString(); } $scope.onEditSave = function(form) { if (form) { $scope.errors = validate(form); if ($scope.errors) { console.error($scope.errors); return; } } if (!isSymbolNameValid($scope.dataDetails.symbolNew)) { $rootScope.showError( L.tsq("Symbol name cannot contain any special characters!") ); return; } try { $scope.dataDetails.instrument = $scope.instrumentChooser.getInstrument().instrument; } catch (err) { console.error("Cannot set symbol instrument. " + err); } try { $scope.dataDetails.swap = $scope.instrumentChooser.getInstrument().swap } catch (err) { console.error("Cannot set symbol swap. " + err); } DMDataService.editData($scope.dataDetails); hidePopup("#editSymbolModal"); }; function getSelectedSymbols(rowIndex) { var symbols = []; var rowData = []; if (rowIndex >= 0) { rowData.push(grid.getRowData(rowIndex).cells); } else { rowData = grid.getSelectedRows().selectedRowsData; } for (var i = 0; i < rowData.length; i++) { var data = rowData[i]; var rowIndex = grid.getRowIndex(data[0]); var connection = grid.getUserData(rowIndex, "connection"); var timezone = grid.getUserData(rowIndex, "timezone"); var barType = grid.getUserData(rowIndex, "barType"); var uSymbol = grid.getUserData(rowIndex, "uSymbol"); var sourceDataId = grid.getUserData(rowIndex, "sourceDataId"); var source = grid.getUserData(rowIndex, "source"); var id = grid.getUserData(rowIndex, "id"); symbols.push({ rowIndex: rowIndex, symbol: data[0], instrument: data[1], timeframe: data[4], timezone: timezone, dateFrom: data[6], dateTo: data[7], totalRecords: data[9], sourceType: getSourceType(data[10]), dataType: getDataType(data[11]), connection: connection, barType: barType, uSymbol: uSymbol, sourceDataId: sourceDataId, id: id, }); } return symbols; } function isBmfSymbol(uSymbol){ return uSymbol && (uSymbol.includes('$D') || uSymbol.includes('$N') || uSymbol.includes('@D')|| uSymbol.includes('@N') && !uSymbol.startsWith('$') && !uSymbol.startsWith('@')); } function updateGridData(data) { var actions = loadGridProgressBarActions(grid); grid.removeAllRows(true, true, true); if (data) { for (var i = 0; i < data.length; i++) { var uSymbol = ""; if (data[i].sourceDataId) { //clone var item = getItem(data, "id", data[i].sourceDataId); if (item) { uSymbol = L.tsq("Clone of %s", [item.symbol]); } } else { //other symbol dukascopy,barchart) uSymbol = data[i].uSymbol; var bmfSymbol = isBmfSymbol(uSymbol); if (bmfSymbol){ uSymbol = data[i].uSymbolName; }else if (uSymbol && uSymbol != data[i].uSymbolName) { uSymbol = uSymbol + " (" + data[i].uSymbolName + ")"; } } grid.appendData( [ [ data[i].symbol, data[i].instrument, data[i].brokerName, uSymbol, data[i].timeframe ? data[i].timeframe : "", data[i].timezoneShort ? data[i].timezoneShort : "", data[i].dateFrom == 0 ? "" : timeToDateString(data[i].dateFrom), data[i].dateTo == 0 ? "" : timeToDateString(data[i].dateTo), data[i].totalDays, data[i].rows, sourceTypeToString(data[i].source), data[i].barType ? (data[i].barType==1?"Start of bar":"End of bar") : "", dataTypeToString(data[i].dataType), "{{checkboxWidget}}", "{{progress-bar}}", createActionLink( '', "action-link", "delete", i ), ], ], true ); var rowIndex = grid.getRowIndex(data[i].symbol); grid.setUserData(rowIndex, "connection", data[i].connection); grid.setUserData(rowIndex, "barType", data[i].barType); grid.setUserData(rowIndex, "timezone", data[i].timezone); grid.setUserData(rowIndex, "uSymbol", data[i].uSymbol); grid.setUserData(rowIndex, "sourceDataId", data[i].sourceDataId); grid.setUserData(rowIndex, "id", data[i].id); sqGridCheckboxSetValue(grid, rowIndex, 11, !data[i].show, true); } } if (!grid.getSelectedRows().selectedRowsData.length) { $scope.selectedRow = null; } applyGridProgressBarActions(grid, actions); grid.sortAll(); $scope.totalRecords = grid.getNumberOfRows(); try { $scope.$digest(); } catch (err) {} } $scope.dataTypes = angular.copy(SQConstants.getConstants().dataTypes); $scope.dataSources = angular.copy(SQConstants.getConstants().dataSources); function dataTypeToString(type) { var dataType = getItem($scope.dataTypes, "value", type); return dataType ? dataType.name : ""; } function sourceTypeToString(type) { var dataSource = getItem($scope.dataSources, "value", type); return dataSource ? dataSource.name : ""; } function getDataType(name) { var dataType = getItem($scope.dataTypes, "name", name); return dataType ? dataType.value : ""; } function getSourceType(name) { var dataSource = getItem($scope.dataSources, "name", name); return dataSource ? dataSource.value : ""; } $scope.getBrokerProfileLabel = function(){ if (!$scope.filter.brokerId) return L.tsq('All broker profiles'); var brokerProfile = getItem($scope.brokerProfiles, 'id', $scope.filter.brokerId); return brokerProfile ? brokerProfile.name : ''; } $scope.getDataSourceLabel = function() { if (!$scope.filter.dataSource) return L.tsq("All data sources"); var dataSource = getItem( $scope.dataSources, "value", $scope.filter.dataSource ); return dataSource ? L.tsq(dataSource.name) : ""; }; $scope.getDataTypeLabel = function() { if (!$scope.filter.dataType) return L.tsq("All data types"); var dataType = getItem( $scope.dataTypes, "value", $scope.filter.dataType ); return dataType ? L.tsq(dataType.name) : ""; }; $scope.getGroupLabel = function() { if (!$scope.filter.group) return L.tsq("By stock group - none"); var dataGroup = getItem( $scope.groups, "name", $scope.filter.group ); return dataGroup ? L.tsq(dataGroup.name) : ""; }; function modifyDataGrid(data){ for(var i =0;i