Fui acusado, onde é que eu descubro porquê? - página 9

 
kylinar2012:
Como participante nesta acção, concordo em tornar o caso público, não tenho nada a esconder.
Por isso, vá em frente.
 
Armen:
Portanto, ponha-o para fora.
O que colocar? Código EA para MT4? Aqui está o texto do anúncio:

Olá, eu gostaria que um EA ou indicador e um guião criassem um gráfico Renko - em MT5.

Ou seja, é possível pendurar indicadores e guiões no gráfico.

No MT4 é implementado por vários conselheiros, eu pessoalmente uso RenkoLiveChart_v3.2, gostaria de ter algo semelhante para o MT5.

Bem, código anexo de RenkoLiveChart_v3.2,

Aqui está a resposta do artista:

"Eu posso começar.

Mas fá-lo-ei dentro desta semana.



É isso, mais rejeição e penalização.

 
Armen:
por isso, ponha-o para cima.

Eis o que o empreiteiro escreveu sobre o TOR (copiado literalmente):


"Por favor anexar o código fonte do perito como ToR. (que significa RenkoLiveChart_v3.2)

montante 100 tempo 5."


Toda a correspondência com o intérprete estava apenas no serviço, de modo que os moderadores a viram ao decidir sobre a multa.

 
kylinar2012:
O que colocar? Código EA para MT4? Aqui está o texto do anúncio:

Olá, gostaria que um consultor especialista ou indicador e um guião criassem a Renco-Chart em MT5.

Ou seja, é possível pendurar indicadores e guiões no gráfico.

No MT4 é implementado por vários conselheiros, eu pessoalmente uso RenkoLiveChart_v3.2, gostaria de ter algo semelhante para o MT5.

Bem, código anexo de RenkoLiveChart_v3.2,

Aqui está a resposta do artista:

"Eu posso começar.

Mas fá-lo-ei dentro desta semana.



É isso, mais rejeição e multa.

onde está a frase:"revela-se irrealista devido à arquitectura MT5"?

E aqui está a frase seguinte escrita que em geral - é real fazer o trabalho, mas a um preço de 4 vezes mais.

 
kylinar2012:

É claro que nas discussões acima referidas existem frases que talvez os TOR tenham mudado, ou algum outro motivo de força maior.

Aqui está uma frase literal do artista (copiada) porque é que o trabalho não foi feito: "revela-se irrealista por causa da arquitectura do MT5".

E a frase seguinte é escrita que em geral - é possível fazer o trabalho, mas a um custo 4 vezes superior.

E o que é que eu tenho a ver com isso como cliente? Oárbitro Rosh ainda não me explicou.



onde na correspondência está isto? ver acima
 

Bem, e para completar o quadro, traga aqui um artista.

Para ser honesto, se eu fosse ele, já teria vindo há muito tempo, dado $5, e dormido pacificamente.

Mas agora que já começámos, vamos continuar com isto. Afixe o texto completo da correspondência (incluindo o seu trabalho e a sua carta) com uma cronologia, e peça comentários a Rashid ou Renat.

 

komposter:

Bem, e para completar o quadro, traga aqui um artista.

Para ser honesto, se eu fosse ele, já teria vindo há muito tempo, dado $5, e dormido pacificamente.

Mas agora que já começámos, vamos continuar com isto. Afixe o texto completo da correspondência (incluindo o seu trabalho e a sua carta) com cronologia, e peça comentários a Rashid ou Renat.

Como escrevi anteriormente, não está no montante (5feb.) e nem sequer no artista (bem, não calculado a sua força, acontece), e no princípio de cobrança de multas pelos moderadores do recurso. A pena não é imposta ao perpetrador, mas a quem for mais conveniente.

Não posso convidar o executor, se ele não vier, por isso ele acha melhor, é um direito seu.

Aqui está o texto do TOR:

TERMOS DE REFERÊNCIA

A tarefa é criar um consultor que cria Renko - gráfico no terminal de comércio Metatrader 5, semelhante em funcionalidade a RenkoLiveChart_v3.2.mq4, utilizado no terminal de comércio Metatrader 4.

RenkoLiveChart_v3.2.mq4 código fonte:

//+---------------------------------------------------------------------------+
//| EA VERSION
//| RenkoLiveChart_v3.2.mq4
//| Inspirado no guião Renko por "e4" (renko_live_scr.mq4)
//| Copyleft 2009 LastViking
//|
//| Ago 12 2009 (LV):
//| - Procurava volume no meu gráfico Renko por isso escrevi o meu próprio guião
//|
//| Ago 20-21 2009 (LV) (v1.1 - v1.3):
//| - Primeira tentativa de formação ao vivo de tijolos Renko (bugs O bugs...)
//| - problema corrigido com nomes de símbolos estranhos com cerca de 5 dígitos
//| corretores (crédito à Tigertron)
//|
//| Ago 24 2009 (LV) (v1.4):
//| - Manusear Alto / Baixo na história de uma forma razoável (prev.
//| usado Fechar)
//|
//| Ago 26 2009 (Lou G) (v1.5/v1.6):
//| - Finaly fixing the "late appearance" (tijolo Renko ao vivo
//| formação) bug
//|
//| Ago 31 2009 (LV) (v2.0):
//| - Não é um guião mais longo, mas funciona como indicador
//| - Narrado o bug MT4 que costumava causar o "bug do aparecimento tardio".
//| um pouco mais perto (tem a ver com Alto / Baixo intervalo)
//| - Removido o tempo ... laço de sono(). A tabela Renko está agora assinalada
//| dirigido: -MUSH mais agradável aos recursos do sistema desta forma
//|
///| Set 03 2009 (LV) (v2.1):
//| - Fixo para que o Tempo[] mantenha o tempo aberto do renko
//| tijolos (prev. tempo usado de fecho)
//|
//| Set 16 2009 (Lou G) (v3.0):
//| - Puxadores opcionais adicionados
//| - Conversão de volta para EA
//| - Ajuste automático para corretores de 5 e 6 plataformas adicionado
//| - insira RenkoBoxSize como tamanho "real", por exemplo "10" por 10 pips
//| - Adicionada compensação por problema de "comparação zero
//|
//| Okt 05 2009 (LV) (v3.1):
//| - Corrigido um bug relacionado com o BoxOffset
//| - Ajuste automático para pares JPY de 3 e 4 dec JPY
//| - Função init() removida
//| - Mudado de volta ao estilo antigo Renko formação de tijolos
//|
//| Okt 13 2009 (LV) (v3.2):
//| - Adicionada a opção "EmulateOnLineChart" (crédito a Skipperxit/Mimmo)
//|
//+---------------------------------------------------------------------------+
#propriedade de direitos de autor ""
//+------------------------------------------------------------------+
#incluir <WinUser32.mqh>
#incluir <stdlib.mqh>
//+------------------------------------------------------------------+
#importar "user32.dll
int RegisterWindowMessageA(string lpString);
#importância
//+------------------------------------------------------------------+
Exterior int RenkoBoxSize = 10;
interno externo RenkoBoxOffset = 0;
Exterior inttern RenkoTimeFrame = 2; // Qual o período de tempo a utilizar para o gráfico renko offline
bool exterior ShowWicks = verdadeiro;
bool externo EmulateOnLineChart = verdadeiro;
bool externo StrangeSymbolName = falso;
//+------------------------------------------------------------------+
int HstHandle = -1, LastFPos = 0, MT4InternalMsg = 0;
string SymbolName;
//+------------------------------------------------------------------+
janela UpdateChartWindow() {
estática int hwnd = 0;

if(hwnd == 0) {
hwnd = WindowHandle(SymbolName, RenkoTimeFrame);
if(hwnd != 0) Print("Janela do gráfico detectado");
}

if(EmulateOnLineChart && MT4InternalMsg == 0)
MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message");

if(hwnd != 0) if(PostMessageA(hwnd, WM_COMMAND, 0x822c, 0) == 0) hwnd = 0;
if(hwnd != 0 && MT4InternalMsg != 0) PostMessageA(hwnd, MT4InternalMsg, 2, 1);

regressar;
}
//+------------------------------------------------------------------+
int start() {

BoxPoints estáticos duplos, UpWick, DnWick;
estático duplo PrevLow, PrevHigh, PrevOpen, PrevClose, CurVolume, CurLow, CurHigh, CurOpen, CurClose;
data/hora estática PrevTime;

//+------------------------------------------------------------------+
// Isto só é executado, depois o primeiro tique chega.
if(HstHandle < 0) {
// Init

// Verificação de erros
if(!IsConnected()) {
Imprimir("À espera de ligação...");
return(0);
}
if(!IsDllsAllowed()) {
Imprimir("Erro: Chamadas Dll devem ser permitidas!");
retorno(-1);
}
if(MathAbs(RenkoBoxOffset) >= RenkoBoxSize) {
Imprimir("Erro: |RenkoBoxOffset| deve ser menos do que RenkoBoxSize!")
retorno(-1);
}
switch(RenkoTimeFrame) {
caso 1: caso 5: caso 15: caso 30: caso 60: caso 240:
caso 1440: caso 10080: caso 43200: caso 0:
Imprimir("Error: Invald time frame used for offline renko chart (RenkoTimeFrame)");
retorno(-1);
}
//

int BoxSize = RenkoBoxSize;
int BoxOffset = RenkoBoxOffset;
if(Digitos == 5 ||| (Dígitos == 3 && StringFind(Símbolo(), "JPY") != -1)) {
BoxSize = BoxSize*10;
BoxOffset = BoxOffset*10;
}
if(Digitos == 6 ||| (Dígitos == 4 && StringFind(Símbolo(), "JPY") != -1)) {
BoxSize = BoxSize*100;
BoxOffset = BoxOffset*100;
}

if(StrangeSymbolName) SymbolName = StringSubstr(Symbol(), 0, 6);
else SymbolName = Symbol();
BoxPoints = NormalizeDouble(BoxSize*Point, Dígitos);
PrevLow = NormalizeDouble(BoxOffset*Point + MathFloor(Close[Bars-1]/BoxPoints)*BoxPoints, Dígitos);
DnWick = PrevLow;
PrevHigh = PrevLow + BoxPoints;
PrevWick = PrevHigh;
PrevOpen = PrevLow;
PrevClose = PrevHigh;
CurVolume = 1;
PrevTime = Tempo[Bars-1];

// criar / abrir ficheiro hst
HstHandle = FileOpenHistory(SymbolName + RenkoTimeFrame + ".hst", FILE_BIN|FILE_WRITE);
if(HstHandle < 0) {
Imprimir("Erro: não pode criar / abrir ficheiro de histórico: " + ErrorDescription(GetLastError()) + ": " + SymbolName + RenkoTimeFrame + ".hst");
retorno(-1);
}
//

// escrever o cabeçalho do ficheiro hst
int HstUnused[13];
FileWriteInteger(HstHandle, 400, LONG_VALUE); // Versão
FileWriteString(HstHandle, "", 64); // FileWriteString(HstHandle, "", 64); // Versão
FileWriteString(HstHandle, SymbolName, 12); // Símbolo
FileWriteInteger(HstHandle, RenkoTimeFrame, LONG_VALUE); // Período
FileWriteInteger(HstHandle, Digitos, LONG_VALUE); // Digitos
FileWriteInteger(HstHandle, 0, LONG_VALUE); // Sinal horário
FileWriteInteger(HstHandle, 0, LONG_VALUE); // Last Sync
FileWriteArray(HstHandle, HstUnused, 0, 13); // Não usado
//

// processar dados históricos
int i = Bars-2;
// Imprimir(Símbolo() + " + Alto[i] + " + Baixo[i] + " + Aberto[i] + " + Fechar[i])
//---------------------------------------------------------------------------
while(i >= 0) {

CurVolume = CurVolume + Volume[i];

UpWick = MathMax(UpWick, High[i]);
DnWick = MathMin(DnWick, Low[i]);

// actualizar baixo antes do alto ou da inversão, dependendo se é mais próximo da barra de pré
bool UpTrend = Alto[i]+Baixo[i] > Alto[i+1]+Baixo[i+1];

while(UpTrend &&& (Low[i] < PrevLow-BoxPoints ||| CompareDoubles(Low[i], PrevLow-BoxPoints)) {
PrevHigh = PrevHigh - BoxPoints;
PrevLow = PrevLow - BoxPoints;
PrevOpen = PrevHigh;
PrevClose = PrevLow;

FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);

if(ShowWicks && UpWick > PrevHigh) FileWriteDouble(HstHandle, UpWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);

FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);

UpWick = 0;
DnWick = EMPTY_VALUE;
CurVolume = 0;
CurHigh = PrevLow;
CurLow = PrevLow;

if(PrevTime < Tempo[i]) PrevTime = Tempo[i];
senão PrevTime+++;
}

while(High[i] > PrevHigh+BoxPoints || CompareDoubles(High[i], PrevHigh+BoxPoints)) {
PrevHigh = PrevHigh + BoxPoints;
PrevLow = PrevLow + BoxPoints;
PrevOpen = PrevLow;
PrevClose = PrevHigh;

FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);

if(ShowWicks && DnWick < PrevLow) FileWriteDouble(HstHandle, DnWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);

FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);

UpWick = 0;
DnWick = EMPTY_VALUE;
CurVolume = 0;
CurHigh = PrevHigh;
CurLow = PrevHigh;

if(PrevTime < Tempo[i]) PrevTime = Tempo[i];
senão PrevTime+++;
}

while(!UpTrend && (Low[i] < PrevLow-BoxPoints ||| CompareDoubles(Low[i], PrevLow-BoxPoints)) {
PrevHigh = PrevHigh - BoxPoints;
PrevLow = PrevLow - BoxPoints;
PrevOpen = PrevHigh;
PrevClose = PrevLow;

FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);

if(ShowWicks && UpWick > PrevHigh) FileWriteDouble(HstHandle, UpWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);

FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);

UpWick = 0;
DnWick = EMPTY_VALUE;
CurVolume = 0;
CurHigh = PrevLow;
CurLow = PrevLow;

if(PrevTime < Tempo[i]) PrevTime = Tempo[i];
senão PrevTime+++;
}
i--;
}
LastFPos = FileTell(HstHandle); // Lembrar última pos em ficheiro
//

Comentário("RenkoLiveChart(" + RenkoBoxSize + "): Abrir Offline ", SymbolName, ",M", RenkoTimeFrame, " to view chart");

if(Close[0] > MathMax(PrevClose, PrevOpen)) CurOpen = MathMax(PrevClose, PrevOpen);
senão se (Fechar[0] < MathMin(PrevClose, PrevOpen)) CurOpen = MathMin(PrevClose, PrevOpen);
senão CurOpen = Close[0];

CurClose = Fechar[0];

if(UpWick > PrevHigh) CurHigh = UpWick;
if(DnWick < PrevLow) CurLow = DnWick;

FileWriteInteger(HstHandle, PrevTime, LONG_VALUE); // Tempo
FileWriteDouble(HstHandle, CurOpen, DOUBLE_VALUE); // Aberto
FileWriteDouble(HstHandle, CurLow, DOUBLE_VALUE); // Baixo
FileWriteDouble(HstHandle, CurHigh, DOUBLE_VALUE); // Alto
FileWriteDouble(HstHandle, CurClose, DOUBLE_VALUE); // Fechar
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE); // Volume
FileFlush(HstHandle);

Janela UpdateChartWindow();

return(0);
// Terminar dados históricos / Init
}
//----------------------------------------------------------------------------
// HstHandle not < 0 so we always enter here after history done
// Começar a alimentação de dados ao vivo

UpWick = MathMax(UpWick, Bid);
DnWick = MathMin(DnWick, Bid);

CurVolume++;
FileSeek(HstHandle, LastFPos, SEEK_SET);

//-------------------------------------------------------------------------
// caixa para cima
if(Bid > PrevHigh+BoxPoints || CompareDoubles(Bid, PrevHigh+BoxPoints)) {
PrevHigh = PrevHigh + BoxPoints;
PrevLow = PrevLow + BoxPoints;
PrevOpen = PrevLow;
PrevClose = PrevHigh;

FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);

if (ShowWicks && DnWick < PrevLow) FileWriteDouble(HstHandle, DnWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);

FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);
FileFlush(HstHandle);
LastFPos = FileTell(HstHandle); // Remeber Última pos em ficheiro

if(PrevTime < TimeCurrent()) PrevTime = TimeCurrent();
senão PrevTime+++;

CurVolume = 0;
CurHigh = PrevHigh;
CurLow = PrevHigh;

UpWick = 0;
DnWick = EMPTY_VALUE;

Janela UpdateChartWindow();
}
//-------------------------------------------------------------------------
// caixa para baixo
else if(Bid < PrevLow-BoxPoints || CompareDoubles(Bid,PrevLow-BoxPoints)) {
PrevHigh = PrevHigh - BoxPoints;
PrevLow = PrevLow - BoxPoints;
PrevOpen = PrevHigh;
PrevClose = PrevLow;

FileWriteInteger(HstHandle, PrevTime, LONG_VALUE);
FileWriteDouble(HstHandle, PrevOpen, DOUBLE_VALUE);
FileWriteDouble(HstHandle, PrevLow, DOUBLE_VALUE);

if(ShowWicks && UpWick > PrevHigh) FileWriteDouble(HstHandle, UpWick, DOUBLE_VALUE);
else FileWriteDouble(HstHandle, PrevHigh, DOUBLE_VALUE);

FileWriteDouble(HstHandle, PrevClose, DOUBLE_VALUE);
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE);
FileFlush(HstHandle);
LastFPos = FileTell(HstHandle); // Remeber Última pos em ficheiro

if(PrevTime < TimeCurrent()) PrevTime = TimeCurrent();
senão PrevTime+++;

CurVolume = 0;
CurHigh = PrevLow;
CurLow = PrevLow;

UpWick = 0;
DnWick = EMPTY_VALUE;

Janela UpdateChartWindow();
}
//-------------------------------------------------------------------------
// sem caixa - alto/baixo não atingido
senão {\i1}
if(Bid > CurHigh) CurHigh = Bid;
if(Bid < CurLow) CurLow = Bid;

if(PrevHigh <= Bid) CurOpen = PrevHigh;
senão se(PrevLow >= Bid) CurOpen = PrevLow;
senão CurOpen = Licitação;

CurClose = Licitação;

FileWriteInteger(HstHandle, PrevTime, LONG_VALUE); // Tempo
FileWriteDouble(HstHandle, CurOpen, DOUBLE_VALUE); // Aberto
FileWriteDouble(HstHandle, CurLow, DOUBLE_VALUE); // Baixo
FileWriteDouble(HstHandle, CurHigh, DOUBLE_VALUE); // Alto
FileWriteDouble(HstHandle, CurClose, DOUBLE_VALUE); // Fechar
FileWriteDouble(HstHandle, CurVolume, DOUBLE_VALUE); // Volume
FileFlush(HstHandle);

Janela UpdateChartWindow();
}
return(0);
}
//+------------------------------------------------------------------+
int deinit() {
if(HstHandle >= 0) {
FileClose(HstHandle);
HstHandle = -1;
}
Comentário(");
return(0);
}
//+------------------------------------------------------------------+

Aqui está a RESPOSTA do EXECUTIVO:


15794

Im_hungry 2013.11.25 17:25

Eu posso começar.

Mas será possível dentro desta semana.


Próximo

Im_hungry 2013.11.26 07:59

Vou apenas reescrevê-lo. Vou enviar-lhe a fonte e outras coisas.

Enviar-lhe-ei o código fonte.


A seguir:

Im_hungry 2013.11.26 08:33

Poderei começar a trabalhar nisso amanhã.

Só poderá começar amanhã. Fará até ao final da semana


2013.11.26 10:25

O desenvolvedor Im_hungry confirmou a etapa "acordo para trabalhar".




 
komposter:

Bem, e para completar o quadro, traga aqui um artista.

Para ser honesto, se eu fosse ele, já teria vindo há muito tempo, dado $5, e dormido pacificamente.

Mas agora que já começámos, vamos continuar com isto. Afixe o texto completo da correspondência (incluindo a sua tarefa e a sua carta) com uma cronologia, e peça comentários a Rashid ou Renat.

Aqui está a resposta, apareceram linhas, não as posso remover, estou a escrever o próximo post.

Próximo

Im_hungry 2013.11.26 10:27

A seguir é a sua vez.

Como ToR, anexar o código fonte do perito.

montante 100 tempo 5.

Para prosseguir para o próximo passo e iniciar o trabalho, deve ter o montante especificado na sua conta (Perfil - Pagamentos - recarregar)

Todas as regras aqui : https://www.mql5.com/ru/job/rules


Im_hungry 2013.11.26 12:11

ok.

Os fundos serão congelados até que confirme a etapa de "Pagamento

Após verificação e recepção do código fonte. Se houver alguma coisa, há uma arbitragem

ao qual poderá apresentar um pedido de reembolso.


2013.11.27 12:20 O cliente kylinar2012 confirmou o passo "Acordo de TOR". O custo final do trabalho é fixado em 100,00 créditos.

Termos de referência anexos ao cliente


2013.11.27 14:01

O programador Im_hungry confirmou o passo "Concordo ToR". 100,00 créditos congelados por conta do cliente(kylinar2012)

2013.12.01 09:38

O desenvolvedor Im_hungry candidatou-se à arbitragem:

"Por favor, feche o pedido a favor do cliente. Os Termos de Serviço não podem ser implementados devido à arquitectura MT5. Obrigado".

2013.12.02 11:28

Como resultado da arbitragem, o trabalho foi cancelado pelo administrador Rosh. Os fundos congelados de 95,00 créditos foram devolvidos ao cliente. O intérprete foi transferido para "Rejeitado".


É isso, depois um e-mail para mim:


Desculpe tê-lo feito esperar, mas para o MT5 isto
Acontece que não é realista fazê-lo devido à arquitectura mt5.
Mas é possível piratear os ficheiros e reescrever os dados
onde os dados da barra são armazenados. Mas será caro.
400$ + há algumas limitações. Fá-lo-ei em poucos dias.

Com todo o respeito, Alex.


Qual é a minha culpa? Qual é a pena? Peço comentários ao Rashid ou ao Renat.

 

Acrescentaria também que tal EA é implementada aqui:

https://www.mql5.com/ru/market/product/714#full_description

Só que, para mim, é um pouco estranho, uma vez que utiliza indicadores específicos (infelizmente).

Se eu pudesse ter colocado o meu, não me teria incomodado com este desenvolvimento, mas tê-lo-ia comprado lá.

Технический индикатор Renko Charts
Технический индикатор Renko Charts
  • 99.00 USD
  • Konstantin Gruzdev
  • www.mql5.com
Индикатор iRenkoChart предназначен для создания пользовательских графиков Renko. Используется открытый формат файлов истории, легкое переключение между графиками на основе Bid и Ask котировок, контроль качества истории, возможность использования...
 
kylinar2012:

De que sou eu culpado? Por que sou multado? Peço comentários ao Rashid ou ao Renat.

Não há correspondência com outros candidatos?

Estou do vosso lado. O comentário de Rashid será muito interessante.

Razão: