[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 417

 
okvseok:


bem, por exemplo, não gire a roda do mouse (tecla) durante 3 minutos à esquerda ou à direita)), mas apenas insira uma data de barra específica ou outra coisa.

Obrigado por sua resposta!


Pressione a barra de espaço e digite a data desejada.

A resposta é tão correta quanto inútil. Totalmente relevante para a pergunta.

 
TarasBY:
No canto inferior esquerdo do gráfico (onde está a data), clique duas vezes e na janela que se abre, digite a data desejada no formato DD.MM.YYYY - isto "não está escrito à mão" o suficiente?
Sim, muito obrigado. ok.
 
Run:

ou em outras palavras
o roteiro deve escrever aproximadamente n número de linhas, mas só escreve uma

Para começar, tire o procedimento de abertura e fechamento do arquivo do laço.
 

Obrigado, está funcionando.

  handle=FileOpen("AUDJPY.csv", FILE_READ|FILE_WRITE, '\t');
  for (int i=NumberOfCandels; i>0; i--) {
    arrowbuy = iCustom(NULL, 0, "xxx", 0, i);
    arrowsell = iCustom(NULL, 0, "xxx", 1, i);
    if(arrowbuy != EMPTY_VALUE && arrowsell == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Buy");
        }
      }
    if(arrowsell != EMPTY_VALUE && arrowbuy == EMPTY_VALUE) {
      if(handle>0) {
        FileWrite(handle, TimeToStr(Time[i], TIME_DATE|TIME_MINUTES), " Sell");
        }
      }
  }
  FileClose(handle);
 
okvseok:


Bem, por exemplo, não role a roda do mouse (tecla 3 minutos para a esquerda ou para a direita)), mas apenas insira uma determinada data de bar ou outra coisa.

Obrigado pela resposta!

Há uma função

int iBarShift( símbolo de corda, período int, data/hora, bool exato=falso)
Procura de um bar pelo tempo. A função retorna o offset da barra à qual pertence o tempo especificado. Se não houver barra para o tempo especificado ("furo" no histórico), a função retorna, dependendo do parâmetro exato, -1 ou o offset da barra mais próxima.
Parâmetros:
símbolo - Nome simbólico do instrumento. NULL significa símbolo atual.
cronograma - Período. Pode ser um dos prazos de um gráfico. 0 significa o período do gráfico atual.
tempo - Valor de tempo para a busca.
exato - Valor devolvido se nenhuma barra for encontrada. FALSO - iBarShift retorna mais próximo. VERDADEIRO - iBarShift retorna -1.
Exemplo:
 datetime some_time=D'2004.03.21 12:00'; int shift=iBarShift("EUROUSD",PERIOD_M1,some_time); Print("shift of bar with open time ",TimeToStr(some_time)," é ",shift);

 
Chiripaha:

: )))))))) (sem notações... e sem comentários)

Dos dois, o questionador e o respondedor, é mais provável que você, o questionador, não entenda bem o que acontece com as ordens pendentes quando elas são acionadas. Uma ordem pendente é executada a QUALQUER preço mais próximo a ela. A regra básica para uma ordem pendente é que, se o preço tiver alcançado, o comércio irá para o mercado. E o preço não importará. Isto também se aplica a Stop Losses, uma vez que eles também são ordens pendentes, apenas a posição oposta do próprio comércio. Isto é ligeiramente diferente das negociações na bolsa. Talvez seja por isso que você esteja confuso.

Neste sentido, muito depende da qualidade do corretor. Com isso nos referimos tanto ao regulamento de execução das operações, como à disponibilidade de liquidez naquele corretor e talvez a um monte de outras características: presumivelmente honestidade, etc... Se você ler o contrato com quase qualquer corretor (DC), acontece que sua transação (e qualquer outro comerciante) pode fechar a qualquer preço conveniente deste "corretor" e estará dentro da lei e dos regulamentos, porque você o assinou. - Mas esses são outros tópicos. Não tem nada a ver com programação.


Se você tiver um robô na demonstração, tudo normalmente se abre adequadamente para atrair pessoas. E, mais uma vez, repito, as ordens que foram abertas manualmente foram abertas no local em que foram definidas!
 
Ekburg:

Quanto ao corretor forex, eu não tenho uma imagem clara, mas já negociei na demonstração. E, mais uma vez, repito, as ordens que foram abertas manualmente foram abertas exatamente onde foram definidas!

Conclusão: É claro que você poderia, por interesse, pedir-lhe para descrever as condições com mais detalhes, já que você só forneceu uma descrição geral: quando as ordens do robô foram estabelecidas (com ou sem antecedência; manual por volta da mesma hora que o robô ou não, etc.). Mas de qualquer forma, mesmo neste caso, você só terá que lidar com seu corretor, pois ele tem seu próprio fio que provavelmente enfileira os negócios. Suponha que, se o pedido manual pendente foi feito primeiro, então o momento de sua execução será diferente (incluindo a fila de outros clientes), então o preço poderá ser diferente. Se o robô colocou as ordens dentro do período de sinais formados, então a chegada das ordens na fila não é evidente - daí o possível viés no preço de execução. Também pode ser afetado pelo tamanho das posições sobre as quais não se escreve nada... etc....

Mas... Mesmo assim, isto só pode ser esclarecido com um corretor (DC). E presumo que ele encontrará um monte de razões que eu não mencionei. - E o conselho estava certo: entre em suas mãos e ao corretor, se, é claro, você ainda acha que suas ordens pendentes foram movidas. Mas não confunda dois conceitos diferentes: uma Ordem Pendente e um Acordo sobre esta Ordem Pendente. A ordem de limite é uma instrução para entrar no mercado a qualquer preço com o volume declarado. E o acordo - é o preço pelo qual foi possível executar seu pedido para o volume de dinheiro declarado (lote). - E os preços destas ordens provavelmente serão diferentes (especialmente no mercado rápido, que é o que lhe foi dado o link). No caso de uma ordem limite, o preço da ordem e o preço da execução são iguais (por definição).

E o fato de a demonstração e as ordens reais do corretor não serem diferentes é bom! - Isto mostra que o corretor não faz negócios falsos para atrair clientes (como você diz). - Não há nenhuma discrepância a ser vista neste caso.

 
Zhunko:

1. Como você começou? Você tem que executá-lo sem atualização prévia. I.e. IsRefreshRates = falso. Os dados não serão atualizados.

2. Então você deve executá-lo com IsRefreshRates = true. Os dados serão atualizados.

Aqui está uma captura de tela 1: captura de tela 2:

Observe os horários dos bares. Você também pode ver que MarketInfo() retira dados da visão geral do mercado.

Aqui está o Consultor Especialista. Eu corrigi um pouco. Nome do instrumento riscado.


1. Usei um terminal não importa como, com ou sem atualização, a tela é a mesma! Eu baixei o terminal junto com os scripts para o teste com 99% da cotação do Dookie. Coloquei-as, pois não se prendem devido ao excesso de tamanho. Aqui está o link:http://www.load.to/PqWVW2JQ75/Тиковые_котировки_для_тестера_MT4_от_DukasCopy.zip

2. em qualquer outro terminal a situação já é diferente. Aqui em Oanda, por exemplo:

2.1 Inicialmente em caso:

IsRefreshRates = false

Portanto:

2.2 Mais adiante no caso:

IsRefreshRates = true

assim.

Como você pode ver no primeiro modo, os preços estão longe do par AUDNZD... e no segundo modo, os preços são exatamente o que queremos ver.

Acontece que ainda RefreshRates() "puxa" as citações do servidor. O suporte está adormecido, portanto, esta variante está mais próxima do que a original.

 
Zhunko:
RefreshRates() atualiza apenas aquilo com que o especialista está trabalhando. É assim que ele descobre. Do especialista. Há muito tempo, alguém de Metakvot escreveu sobre isso.


Vadim, duvido que a RefreshRates() esteja ciente das ferramentas que o Expert Advisor precisa. Nem todos os Expert Advisors têm um nome de ferramenta definido em parâmetros globais, não têm? Bem... Em caso afirmativo, levanta-se a questão, em que baseRefreshRates() sabe que ferramenta os dados de mercado devem ser atualizados e o que não deve ser atualizado?
 
Integer:

Junko, página 409, o post inferior - diz por que os dados são atualizados. Porque iOpen(), iClose() são chamados, e você prova isso a partir de RefreshRates(). A primeira vez que o script foi executado sem RefreshRates(), mas as funções iOpen() e iClose() foram chamadas, e a partir daí o terminal carrega os dados. Na segunda execução os dados já estavam lá e sabemos que a barra zero é carregada primeiro, então a impressão é que os dados estão todos carregados, mas podem não estar todos carregados, mas podem estar em processo.

...E ainda assim você prova que descobriu o carregamento de dados.... de que correntes e sincronizações podemos falar aqui...


Por queiOpen() puxaria os dados do servidor? Está escrito na documentação que devolve um valor... Portanto, está voltando, não fazendo o download.