Servidor dde forex
Interação entre o MetaTrader 4 e o Matlab via DDE.
Introdução.
Eu já publiquei um artigo sobre troca de dados entre o MetaTrader 4 e o Matlab através de arquivos CSV (MT 4 & lt; - CSV - & gt; Matlab) aqui. No entanto, a abordagem descrita no artigo é, em muitos casos, impraticável e, muitas vezes, inaceitável.
O mecanismo de DDE (troca de dados dinâmicos) suportado no MT 4 nos permite transferir dados de um aplicativo para outro diretamente através da RAM do computador. O Matlab tem a funcionalidade completa para realizar tanto o front end quanto o back end do DDE, então gostaríamos de aproveitar ao máximo essa oportunidade.
O servidor DetaTrader 4 DDE fornece apenas os últimos dados de ticks. No entanto, mesmo considerando tais limitações, o DDE é mais preferível quando, por exemplo, trabalhamos com aspas dentro das barras.
Como no artigo "MT 4 & lt; - CSV - & gt; Matlab", descreverei a sequência de criação de uma ferramenta de organização de troca.
Não se esqueça de ativar o servidor DDE nas Ferramentas - & gt; Opções - & gt; Guia do servidor no terminal do seu cliente MetaTrader 4, e podemos começar.
Assim, na organização da troca de dados usando o DDE, há dois fins (front end e back end) entre os quais a conexão será estabelecida. O front end é um aplicativo que solicita dados (no nosso caso o Matlab), o back end é um aplicativo que possui esses dados à sua disposição (MT 4).
Os dados podem ser transferidos do servidor para o cliente via DDE de três maneiras:
- a pedido do cliente,
- por solicitação do cliente e após o servidor ter notificado que os dados foram preparados para transferência, ou.
- após os dados estarem prontos para serem transferidos.
Assim que os dados chegar, mostraremos apenas em um gráfico.
Criando uma GUI.
No ambiente Matlab, existe a possibilidade de criar uma interface gráfica do usuário (GUI). Uma vez criada uma GUI, combinaremos nela todos os controles, gráficos de preços e informações textuais que consideramos necessárias para exibir.
A criação de uma GUI é descrita em mais detalhes na seção 3 do artigo “MT4 & lt; - CSV - & gt; Matlab”, portanto mencionarei apenas o comando de console denominado “guide” que inicia o Assistente de Criação de GUIs, e também darei a lista de objetos gráficos que precisamos.
Assim, precisamos do seguinte:
- caixa de entrada “Edit Text” para inserir o nome do par de moedas;
- “Eixos” para exibir o gráfico;
- dois campos de saída de texto "Texto estático" para exibir o valor exato da última cotação ou para outra coisa.
É mostrado abaixo como eu coloquei os objetos em uma folha GUI:
Você deve definir as propriedades gráficas do objeto da seguinte forma:
Tag = axesChart (exibiremos o gráfico aqui);
Box = on - inclui a área do gráfico em um retângulo completo, fora - inclui a área do gráfico com uma linha esquerda e uma linha inferior;
FontSize = 7 (o tamanho padrão é apenas enorme);
Unidades = pixels (precisaremos disso no gráfico para definir a escala de 1: 1).
Tag = editPair (vamos inserir o nome do par de moedas neste campo).
Tag = textBid (vamos inserir o valor exato da última citação aqui);
HorizontalAlignment = left (isto não é muito importante, você pode deixá-lo como 'center').
Agora podemos pressionar RUN.
Eu nomeei meu projeto "DDEs", então se você quiser que sua versão não tenha nenhuma discrepância com a minha, por favor nomeie o seu projeto da mesma forma.
Se a aparência da sua GUI combina com você e o arquivo m está pronto para edição, vamos começar a criar um cliente DDE.
Conexão Inicializando.
Primeiro de tudo, você deve organizar o canal para se conectar ao servidor ao iniciar a GUI e cuidar das quebras de conexão ao fechar a interface.
No Matlab, a conexão DDE é inicializada pela função: channel = ddeinit ('service', 'topic'),
"Serviço" - nome do servidor DDE ("MT4")
'topic' - nome de uma seção de dados. No nosso caso, pode receber os valores de "BID", "ASK", "QUOTE" etc.
A função retorna o descritor do canal inicializado. Este descritor será usado para outras conversas com o servidor DDE.
Você também deve especificar o método de troca. No Matlab, o método de troca suportado pelo MT4 é chamado de “Advisory link” e inicializado pela função: rc = ddeadv (canal, 'item', 'callback', 'upmtx', format); ,
canal - descritor do canal inicializado,
"Item" - dados nos quais estamos interessados, ou seja, o nome do símbolo de um par de moedas,
'callback' - uma linha a ser executada no momento da chegada dos dados do servidor,
'upmtx' - nome do símbolo da variável para colocar os dados recebidos do servidor,
formato - matriz de dois sinalizadores, que define o formato dos dados enviados.
A função ddeadv retorna “1” se for bem sucedida; caso contrário, retorna "0".
Por favor, não que uma expressão de símbolo seja dada como o parâmetro "callback", não um descritor de função. De fato, executaremos a função “eval” que executa a linha como se tivesse sido digitada em um console. Esse recurso produz a seguinte dificuldade: Na chegada de uma nova cotação, temos que executar uma grande função recebendo a nova cotação. Ao mesmo tempo, gostaríamos de passar para essa função a estrutura de descritores “handles” que será usada para obter acesso aos objetos gráficos da GUI. No entanto, não encontrei nenhum método de passar o descritor de estrutura de handles para a linha executável nem a maneira de chamar a função localizada no arquivo m que descreve a GUI.
Tudo isso resultou em ter que colocar a nova função de recepção de cotação em um arquivo m separado e chamá-la como uma função normal do Matlab. No entanto, o inconveniente acabou por ser uma vantagem depois que eu descobri que poderia editar a função de processamento sem interromper as operações do cliente DDE.
Assim, em primeiro lugar, vamos criar uma função de processamento separada que exibirá apenas os dados recebidos no console.
% novo processamento de ticks.
disp (simbols); % exibe o argumento no console.
song = wavread ('C: \ WINDOWS \ Mídia \ Windows XP - launch. wav'); % leu o som.
wavplay (música, 40000); % toca o som com a taxa de amostragem de 40 kHz.
A função exemplificativa acima também reproduzirá o arquivo 'C: \ WINDOWS \ Mídia \ Windows XP - launch. wav' assim que chegar uma nova cotação. Salve o texto da função como newTick. m no diretório de trabalho do MATLAB.
Agora vamos editar o arquivo m descrevendo o comportamento da nossa GUI. Adicione a inicialização de conexão para a função DDEs_OpeningFcn e deinitialization será adicionado à função figura1_CloseRequestFcn.
(Para adicionar a função CloseRequestFcn ao arquivo m, você deve executar o seguinte no editor de GUI: View - & gt; View Callbacks - & gt; CloseRequestFcn).
% --- Executa logo antes de os DDEs serem visíveis.
função DDEs_OpeningFcn (hObject, eventdata, handles, varargin)
% Esta função não possui argumentos de saída, consulte OutputFcn.
% hObject handle para figura.
% eventdata reserved - a ser definido em uma versão futura do MATLAB.
% lida com estrutura com alças e dados do usuário (veja GUIDATA)
% varargin argumentos da linha de comando para DDEs (consulte VARARGIN)
par = get (handles. editPair, 'UserData'); % leu o nome do símbolo.
rc = ddeadv (canal, par, 'newTick (x)', 'x', [1 1]); % estabelecer conexão.
if (rc == 1)% se a conexão foi estabelecida,
disp ('Conectado'); % informar o console.
handles. chann = canal; % salvar o ID do canal em alças.
% Atualizar estrutura de identificadores.
% UIWAIT faz DDEs aguardar resposta do usuário (consulte UIRESUME)
% --- é executado quando o usuário tenta fechar a figura1.
function figure1_CloseRequestFcn (hObject, eventdata, handles)
% hObject handle para figure1 (consulte GCBO)
% eventdata reserved - a ser definido em uma versão futura do MATLAB.
% lida com estrutura com alças e dados do usuário (veja GUIDATA)
par = get (handles. editPair, 'UserData'); % leu o nome do símbolo.
rc = ddeterm (canal); % de desinicialização.
if (rc == 1)% se tudo estiver OK.
disp ('Desconectado'); % informar o console.
% --- Executa durante a criação do objeto, depois de definir todas as propriedades.
função editPair_CreateFcn (hObject, eventdata, handles)
% hObject handle para editPair (consulte GCBO)
% eventdata reserved - a ser definido em uma versão futura do MATLAB.
% lida com identificadores vazios não criados até que todos os CreateFcns sejam chamados.
set (hObject, 'UserData', 'EURUSD'); % No UserData do campo de entrada - salve.
% Consulte ISPC e COMPUTER.
if ispc & amp; & amp; isequal (get (hObject, 'BackgroundColor'), get (0, 'defaultUicontrolBackgroundColor'))
Eu dei acima os textos completos de funções de modificação junto com o texto preparado para funções de esqueleto vazias pelos desenvolvedores do Matlab.
O último bloco insere o nome do símbolo no campo correspondente antes que a GUI seja iniciada. A entrada será copiada para a propriedade 'UserData'. Sempre usaremos a cópia em 'UserData', enquanto usaremos apenas o nome exibido no campo ('String') se o usuário tentar alterar a segurança. Se o usuário tiver se enganado ao digitar e um nome errado tiver sido escrito em 'String', retornaremos ao nome armazenado em 'UserData'.
O código abaixo realiza a função de alteração do nome do símbolo do usuário:
função editPair_Callback (hObject, eventdata, handles)
% hObject handle para editPair (consulte GCBO)
% eventdata reserved - a ser definido em uma versão futura do MATLAB.
% lida com estrutura com alças e dados do usuário (veja GUIDATA)
newPair = get (hObject, 'String'); % novo nome do símbolo.
canal = handles. chann; % obtém o ID do canal.
if (disconn == 0)% se você não conseguir desconectar.
set (hObject, 'String', oldPair); % restaura o nome antigo do símbolo no campo de entrada.
senão% se diconnected.
conn = ddeadv (canal, newPair, 'newTick (x)', 'x', [1 1]); % estabelecer uma nova conexão.
if (conn == 1)% se a conexão for estabelecida.
set (hObject, 'UserData', newPair); % memoriza qual símbolo é usado.
senão% se você falhar em estabelecer uma nova conexão.
ddeadv (canal, oldPair, 'newTick (x)', 'x', [1 1]); % restaurar o antigo.
set (hObject, 'String', oldPair); % restaura o nome antigo do símbolo no campo de entrada.
% str2double (get (hObject, 'String')) retorna o conteúdo do editPair como um double.
Recebendo carrapatos.
Considere que a conexão é estabelecida e, na chegada de um novo tick, a função "newTick (x)" é chamada de "sela" o argumento recebido do MT 4 em um console. Primeiro, vamos exibir a última cotação recebida na linha correspondente da nossa GUI.
Para isso, devemos ter uma estrutura de descritores de objetos gráficos da GUI - as alças estão à disposição da função "newTick". Vamos usar a função setappdata (h, name, value) que salva os dados no domínio do aplicativo. Especifique "0" como o ID do aplicativo. É o descritor do objeto 'root' do Matlab, é invariante, então podemos sempre conhecê-lo.
Adicione a linha de "setappdata (0, 'hndls', handles);" imediatamente após o título da função "DDEs_OpeningFcn":
função DDEs_OpeningFcn (hObject, eventdata, handles, varargin)
Agora, na função "newTick", podemos extrair as alças pela função de value = getappdata (h, name), tendo especificado "0" como o argumento de "h". Então, poderemos gerenciar os objetos da GUI a partir da função "newTick".
Em seguida, transformamos o argumento de string passado para a função do servidor DDE e exibimos o valor de Bid na GUI. Além disso, detectamos a hora local de receber a cotação e também a exibimos, mas na barra de status da GUI. A hora local é necessária, pois o servidor DDE passa o tempo com precisão de até minutos, o que é inaceitável para trabalhar com marcações. A função 'now' retorna a hora local com precisão de até frações de um milissegundo, portanto, não ficaremos preocupados com o fato de que os ticks diferentes terão o mesmo tempo corrigido. Também extrairemos o tempo do servidor da linha recebida do servidor DDE e transformaremos no formato de hora do Matlab.
Abaixo está mais um exemplo da função "newTick":
% NOVO PROCESSAMENTO INICIAL.
handles = getappdata (0, 'hndls'); % Receber identificadores da raiz.
song = wavread ('C: \ WINDOWS \ Mídia \ Windows XP - launch. wav'); % leu o som.
wavplay (música, 40000); % toca o som com a taxa de amostragem de 40 kHz.
partes = sscanf (simbols, '% i /% i /% i% i:% i% f% f'); % estudando a linha de acordo.
% para o formato: int / int / int int: int float float.
timeServerVect = partes (1: 5); % extrair o tempo.
timeServerVect = timeServerVect '; % transpose (coluna na linha)
timeServerVect = [timeServerVect 00]; % some segundos.
timeServer = datenum (timeServerVect); % de transformação no formato de hora do Matlab.
Oferta = partes (6); % extrair lance.
Peça = partes (7); % extrair Ask.
% --- fim da transformação ---
Aqui está a continuação da função "newTick" que foi iniciada acima. O código é fornecido com comentários detalhados, então, suponho, não será nenhum problema para você fazer a cabeça ou cauda dele.
Apenas explicarei que a matriz de cotações de lance, como a das alças, é armazenada na área de objeto 'raiz', mas salva como "dados". Os dados armazenados representam uma estrutura que consiste em dois campos:
data. name - nome do símbolo de um par de moedas;
data. array - cita o próprio array.
Na função "newTick", esses dados aparecem sob o nome de "ticks", e os campos da estrutura têm os nomes de ticks. name e ticks. array, respectivamente.
ticks. array representa um array que consiste em três colunas:
- hora local no formato de hora do Matlab (com precisão suportada pelo Matlab [microssegundos]);
- horário do servidor no formato de hora do Matlab (com precisão para minutos);
A função "newTick" esvazia a matriz de cotações, se o nome do símbolo no campo "editPair" foi alterado e as cotações de outro símbolo começaram a chegar. Se isso não mudou, linhas são adicionadas ao array existente.
O bloco de operações com o gráfico define os parâmetros (tamanho e posição) da janela de eixos e extrai a largura da janela em pixels a partir deles. Isso é necessário para o programa definir a escala horizontal da exibição - uma cotação em um pixel.
Se houver menos citações do que pixels na largura da janela, o gráfico será desenhado como um todo. Se houver mais citações do que pixels, somente os dados mais recentes que couberem no gráfico serão exibidos.
% --- trabalhando com array de citações ---
GUIpairName = get (handles. editPair, 'UserData'); % nome do símbolo.
isappdata (0, 'data'))% se não houver dados.
ticks. name = GUIpairName; % forma o campo de nome.
ticks. array = []; % forma um campo - uma matriz vazia.
setappdata (0, 'dados', carrapatos); % escreve os dados na raiz.
ticks = getappdata (0, 'dados'); % extrair dados.
strcmp (ticks. name, GUIpairName)% se o nome foi alterado.
ticks. name = GUIpairName; % forma o campo de nome.
ticks. array = []; % forma um campo - uma matriz vazia.
setappdata (0, 'dados', carrapatos); % escreve os dados na raiz.
ticks. array = [ticks. array; timeLocal timeServer Bid]; % adiciona uma linha.
% contendo os novos dados para o array de dados existente.
setappdata (0, 'dados', carrapatos); % escreve os dados na raiz.
% --- fim de trabalhar com a matriz ---
chartSize = get (handles. axesChart, 'Position');% obtém o tamanho da janela do gráfico.
chartSize = chartSize (3); % extrair a largura da janela do gráfico.
lenArray = size (ticks. array); % obtém o tamanho da matriz de dados.
lenArray = lenArray (1); % extrair a quantidade de linhas na matriz de dados.
% do gráfico antigo com um novo.
escadas (handles. axesChart, ticks. array (:, 3)); % desenha o gráfico inteiro.
% exibe o último ajuste de dados no gráfico.
set (handles. axesChart, 'XLim', [1 chartSize]); % set the scale - uma contagem.
% em um pixel de largura.
set (handles. axesChart, 'NextPlot', 'add'); % modo de desenho - adicionando.
plot (handles. axesChart, [1 chartSize], [Bid Bid], 'm');% desenhar o lance horizontal.
A última função a ser descrita é salvar dados de ticks em um arquivo por solicitação do usuário.
Vamos salvar os dados pressionando um botão, então adicione o objeto "Push Button" ao formulário da GUI usando o editor.
Defina as seguintes propriedades de objeto: Tag = pushSave, String = Save.
Ao pressionar o botão "M-file Editor", o modelo da função pushSave_Callback será adicionado ao final do "DDEs. m" automaticamente.
Abaixo está o texto completo da função que salva os dados:
% --- Executa com o botão pressionado no pushSave.
função pushSave_Callback (hObject, eventdata, handles)
% hObject handle to pushSave (consulte GCBO)
% eventdata reserved - a ser definido em uma versão futura do MATLAB.
% lida com estrutura com alças e dados do usuário (veja GUIDATA)
date = datestr (agora, 'aaaa-mm-dd'); % conhecer a data (string)
time = datestr (agora, 'HH-MM-SS')% conhece o tempo (string)
name = get (handles. editPair, 'UserData');% conhece o nome do símbolo (string)
template = [nome '@' data '@' hora]; % forma o nome do arquivo.
[userName, userPath] = uiputfile ([modelo '.txt']); % obtém o nome e o caminho do usuário.
= 0% se "Cancelar" não for pressionado.
ticks = getappdata (0, 'dados'); % obtém os dados da raiz.
% de hora e data.
bidStr = num2str (ticks. array (:, 3)); % form string array chamado BID.
delimStr (1: length (bidStr)) = ''; % forma um separador "coluna".
Mais exatamente, forma uma linha que será transposta para uma coluna.
matrix = [timesStr delimStr 'bidStr]; % gather escreve todos os Str em uma matriz.
dlmwrite ([userPath userName], matriz, '');% salva a matriz em um arquivo.
A função prepara o nome do arquivo que consiste na data, hora e nome do símbolo da segurança.
Na gravação, as matrizes de símbolos são preliminarmente preparadas:
- timesStr - hora local e data correspondentes com as aspas;
- bidStr - coluna BID.
Então todos eles estão unidos em uma matriz.
delimStr representa uma linha que consiste em espaços; o comprimento da linha é igual ao comprimento da coluna BID. Na fusão, a linha delimStr é transposta para uma coluna e separa a coluna de cotações da hora.
Conclusão.
Espero que o método descrito acima permita que você use toda a abundância de funções matemáticas no Matlab para desenvolver e testar suas estratégias de negociação automatizadas.
Traduzido do russo por MetaQuotes Software Corp.
Exportar dados ao vivo para o Excel.
Coloque esses códigos em células individuais do Excel.
Altere o símbolo para cruzes diferentes.
Você também precisará ir em Ferramentas / Opções e marcar a caixa DDE.
Você vê que eu preciso disso para usar esses dados em uma rede neural.
Coloque esses códigos em células individuais do Excel.
Altere o símbolo para cruzes diferentes.
Você também precisará ir em Ferramentas / Opções e marcar a caixa DDE.
Você cria um arquivo para cada par?
O que você nomeia?
Pelas respostas estou chegando parece que pode ser que eu não estou me fazendo muito claro ..
Eu quero começar o dia com uma folha de excel vazia, como os minutos passam, eu quero os valores para o dia, hora, abrir, alta, baixa, fechar e volume para aparecer em cada linha da minha planilha do excel.
Este é um link para uma pasta de trabalho do Excel que eu configurei que usa o mt4 dde ..
Exportação de Cotações.
Os dados de origem que servem de base para todo o trabalho analítico do usuário do terminal são aqueles relacionados às alterações nos preços de segurança. Esta informação é fornecida pela corretora. Os dados de preços permitem desenhar gráficos de símbolos, pesquisar nos mercados financeiros, usar várias táticas comerciais e tomar decisões comerciais. As cotações representam arquivos com registros no formato de & quot; SYMBOL, BID, ASK, DATE & quot; (símbolo de segurança, preço de compra, preço de venda, data e hora) e renda no terminal automaticamente assim que a conexão com o servidor tiver sido estabelecida.
O terminal permite exportar as cotas atuais para outros programas no modo de tempo real através de & quot; DDE & quot; Protocolo (Dynamic Data Exchange). Este é um protocolo de sistemas operacionais do MS Windows usado para troca de dados dinâmicos entre várias aplicações. As cotações são dadas através do DDE apenas na entrada de novos ticks (modo ADVISE), mas não imediatamente a pedido (modo REQUEST) onde o último preço é mostrado. N / A é mostrado no primeiro PEDIDO, e após o novo preço ter sido obtido, as cotações aparecerão.
Para ativar a exportação de cotações do terminal pelo DDE, é necessário ativar o & quot; Ativar servidor DDE & quot; opção nas configurações do terminal.
Atenção: Dados históricos não podem ser exportados através do protocolo DDE. As cotações atuais são exportadas somente quando o terminal do cliente está online.
Formatos de solicitação DDE e seus possíveis resultados pelo exemplo de & quot; DDE-sample. xls & quot; Arquivo:
Pedido BID: = Resultado MT4 | BID! USDCHF: 1.5773.
Pedido ASK: = Resultado MT4 | ASK! USDCHF: 1.5778.
ALTO pedido: = MT4 | ALTO! Resultado USDCHF: 1.5801.
Pedido LOW: = MT4 | LOW! USDCHF result: 1.5741.
Pedido TIME: = MT4 | TIME! Resultado USDCHF: 21.05.02 9:52.
Pedido TIMESEC: = Resultado MT4 | TIME! USDCHF: 21.05.02 9:52:43.
Pedido de cotação: = MT4 | Cota! Resultado USDCHF: 21.05.02 9:52:43 1.5773 1.5778 1.5776.
Atenção: Para que os dados sejam exibidos corretamente no MS Excel, é necessário ativar & quot; Ferramentas & # 150; Opções & # 150; Tradução & # 150; Entrada de fórmula de tradução & quot; opção de menu do MS Excel.
Servidor Forex dedicado.
Se o seu software requer muitos recursos de computação ou você tem muitas plataformas, um Servidor Dedicado Forex mantém as coisas funcionando de forma suave e eficiente.
Tanto o hardware de servidor de nível empresarial quanto os padrões de segurança corporativa ajudam a garantir a segurança completa de seus dados e aplicativos hospedados.
Recursos completos de hardware.
Todos os recursos de hardware no seu Servidor Dedicado Forex são alocados para você. Você literalmente tem um servidor inteiro dentro de um rack em um dos nossos centros de dados alocados apenas para suas necessidades e suas necessidades.
Largura de banda de nível 1.
Nossas redes em Chicago, Nova York, Londres, Zurique foram desenvolvidas especificamente para acomodar aplicativos financeiros e apresentam uplinks redundantes de baixa latência para nossos provedores de largura de banda.
Velocidades de Relâmpago.
Desfrute de controle final, velocidade e desempenho inigualável. Não há absolutamente nenhum recurso compartilhado de computação ou armazenamento em nossos servidores dedicados.
Servidor Forex FXVM Dedicado.
Melhor para executar com segurança muitos terminais de negociação e EAs que usam mais recursos de computação.
16 GB de RAM Intel Xeon E3-1230 v3 + (3,30 GHz) 120 GB de armazenamento (SSD) Backups automáticos opcionais Inicialização automática para baixa latência de MT4 para os principais agentes de FX Windows Server 2008 R2 / 2012 Recursos completos de hardware.
Construa seu próprio Servidor Dedicado Forex.
Totalmente personalizado servidor FX dedicado. Obtenha mais espaço de RAM e SSD!
16/32 GB de RAM Intel Xeon E3-1230 v3 + (3,30 GHz) 128 GB a 1 TB de armazenamento (SSD) Backups automáticos opcionais Opção de RAID de hardware Latência baixa para os principais intermediários de FX Windows Server 2008 R2 / 2012 Recursos completos de hardware.
Telefone de suporte: +61 2 8387 4187.
Direitos autorais e cópia; 2013-2018 Todos os Direitos Reservados por ThinkHuge Ltd dba FXVM.
Microsoft, MetaTrader, Equinix e outras marcas registradas são propriedades de seus respectivos proprietários.
Cuidado: Negociação envolve a possibilidade de perda financeira. Apenas negocie com dinheiro que você está preparado para perder, você deve reconhecer que, para fatores fora de seu controle, você pode perder todo o dinheiro em sua conta de negociação. Muitos corretores de forex também responsabilizam você por perdas que excedam seu capital de negociação. Então você pode perder mais dinheiro do que em sua conta. O FXVM não garante a rentabilidade dos negócios realizados em seus sistemas. Não temos conhecimento do nível de dinheiro com o qual você está negociando ou do nível de risco que você está assumindo em cada negociação. Você deve tomar suas próprias decisões financeiras, não nos responsabilizamos pelo dinheiro ganho ou perdido como resultado do uso de nossos servidores ou conselhos sobre produtos relacionados a forex neste site.
Комментарии
Отправить комментарий