[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 409

 
A solicitação da tabela é semelhante à série CopyRates ArrayCopySeries, não RefreshRates. CopyRates é a única função não comercializável que move o servidor.
 
Zhunko:
Ao abrir e atualizar o gráfico, uma solicitação de novos dados vai para o servidor. Algumas empresas de corretagem gananciosas preferem gastar seu dinheiro em seus próprios bolsos em vez de em servidores mais poderosos e em um canal mais amplo. Eles têm que limitar o número de solicitações do terminal para que um servidor fraco não fique "pendurado". A MRC tem apenas 2000 pedidos por dia. É 10 vezes menor do que o número de seus instrumentos multiplicado pelo número de TFs, sem contar os pedidos comerciais.
Bem, temos que evitar tais cozinhas. Esta é a primeira vez que ouço coisas negativas sobre a MRC. Resta saber se o terminal é o único ou se as funções (exceto negociação) também se referem ao servidor. Eu fiz esta pergunta para apoiar (escrevi sobre isso acima, ainda sem resposta). Se não só, então tudo se encaixa, e se apenas o terminal, então tudo sai absurdo, esse tipo de terminal está funcionando e ele entrará em contato com o servidor para atualizar as cotações, exceder o limite sem negociação. Acho que é inadequado, e ainda assim as funções, como disse Viktor, exceto a negociação, não acessam o servidor.

Zhunko:

Inlúi em MQL4 ajuda a racionalizar o código. Por exemplo, é assim que se parece um indicador para 3000 linhas no meu código.

A questão é que, já vi bibliotecas, e é mencionado na documentação, que os lúdes são normalmente colocados no topo do código, onde as variáveis globais são declaradas. Se há funções em inlúdios, parece estranho pensar que em um lugar onde as variáveis globais são declaradas haverá de fato uma função naquele lugar, e alternativamente, algum tipo de variável. Não é assim que o código é escrito. Se variáveis usadas no Expert Advisor e variáveis externas personalizadas forem declaradas no topo, ninguém coloca funções ao lado delas! Mas eles colocam inlúdios com funções, e isso é considerado normal, como eu o entendo. Isto é o que mais me confunde aqui.

Só não parece lógico...

Por outro lado, se for colocado um inline, em algum lugar. em vez de várias funções, que são responsáveis por obter, digamos, um sinal comercial para algum atributo, seria uma coisa lógica e legível.

Zhunko:

Infelizmente, o compilador não permite que uma inclusão seja usada mais de uma vez em um módulo. Esta é normalmente uma maneira de economizar em códigos repetitivos.

Isto é uma coisa pequena. Afinal de contas, o principal é colocar as principais funções incômodas e fragmentos de código fora do código principal, e chamá-los através da linha inline. E então você pode chamar a função, que você tem em linha, pelo nome da função... E você não terá que se preocupar com esta restrição.
 

Boa tarde a todos.

Funções Studying MarketInfo ( ) e Print( )

Aqui está um código simples com estas funções

Testador, TF 60 min.

double T ;
int start()
{
 T = MarketInfo("EURUSD",MODE_HIGH); // в глобальную переменную Т запоминаем максимум дневной свечи,который должна возвращать  MarketInfo ( )
Print (" corresponds to ", T );           //
if ( T > iHigh( Symbol (), 0,10))  // если максимум текущей дневной свечи > High свечи N10(ТФ60 мин)
OrderSend(Symbol(),OP_SELL,0.1,Bid,1,0,0,"jfh",123 ); открыть ордер
}                                                                                                                       
return;

ПРОБЛЕМА 1.Ордер не открывается 2.Print() постоянно возвращает 0 ПРИМЕЧАНИЕ. Для открытия ордера - мне нужной сравнивать параметры свечей разных ТФ(60 мин и 1440 мин.) Подскажите пожалуйста как это можно сделать. Спасибо.

 
Integer:
O pedido da tabela se parece com o pedido do CopyRates ArrayCopySeries e não com o do RefreshRates. CopyRates é a única função não comercializável que move o servidor.

RefreshRates() verificado. Se este Expert Advisor for executado, por exemplo, no EURUSD, e outra ferramenta cuja janela não foi aberta por muito tempo for inserida nas configurações (para que o histórico não esteja lá), o histórico aparece.

extern string Tool           = "AUDNZD"; // Имя инструмента.
extern bool   IsRefreshRates = true;     // Флаг включения обновления таймсерий.
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
 {
  string sTool = Tool; // Имя инструмента.
  if (Tool == "") sTool = Symbol();
  while (!IsStopped())
   {
    if (IsRefreshRates) RefreshRates();
    string sComment = StringConcatenate("MarketInfo()\n",
                                        TimeToStr(MarketInfo(sTool, MODE_TIME), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(MarketInfo(sTool, MODE_BID), Digits), "  ", DoubleToStr(MarketInfo(sTool, MODE_ASK), Digits),
                                        "\n\nПредопределенные переменные\n",
                                        TimeToStr(Time[0], TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(Bid, Digits), "  ", DoubleToStr(Ask, Digits),
                                        "\n\nМассивы-таймсерии\n");
    for (int i = 0; i < 10; i++)
     {
      sComment = sComment + StringConcatenate(TimeToStr(iTime(sTool, 0, i), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "  ",
                                              DoubleToStr(iOpen(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iLow(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iHigh(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iClose(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iVolume(sTool, 0, i), 0), "\n");
     }
    Comment(sComment);
    Sleep(300);
   }
 }

Portanto, ainda RefreshRates() refere-se ao servidor e preenche o histórico. Como conseqüência, é necessário controlar a chegada da história.

O suporte diz que nenhuma das funções se refere diretamente ao servidor. Tudo é realizado através do terminal :-).

 
TarasBY:
Se você usa GetProfitFromDateInCurrency() (original - isto é IMPORTANTE: não sei o que você pode ter em sua versão), então a função deve ser chamada assim:

e a função devolverá lucros sobre os pedidos fechados desde o início do dia atual.

E você pode pegar todas as coisas estúpidas no código usando o Print().


não funciona. Ele mostra todo o lucro disponível nas negociações durante toda a história.

Aqui está a função original e eu não mudei nada nela, é claro

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}

aqui está sua chamada e impressão

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_D1, 0));  
Print(   GetProfitFromDateInCurrency () );
 
Zhunko:

RefreshRates() verificado. Se este Expert Advisor for executado, por exemplo, no EURUSD, e outra ferramenta cuja janela não foi aberta por muito tempo for inserida nas configurações (para que o histórico não esteja lá), o histórico aparece.

Portanto, ainda RefreshRates() refere-se ao servidor e preenche o histórico. Como conseqüência, é necessário controlar a chegada da história.

O suporte diz que nenhuma das funções se refere diretamente ao servidor. Então, tudo é feito através do terminal :-)


Vadim, eu corri seu roteiro em um terminal no qual eu nunca abri nenhum instrumento além de majores e cruzes com ienes. De qualquer forma, aqui está uma captura de tela:

Nada é bombeado porque a matriz de dados do mercado está vazia, a julgar pelos comentários...

 
hoz:


Vadim, eu corri seu roteiro em um terminal no qual eu nunca abri nenhum instrumento além de majores e cruzes com ienes. De qualquer forma, aqui está uma captura de tela:

Nada está sendo bombeado, pois a matriz de dados do mercado está vazia, a julgar pelos comentários...


Sim. Ele também não notou que tem MarketInfo() em seu Expert Advisor e não apenas RefreshRates().
 
Zhunko:

RefreshRates() verificado. Se este Expert Advisor é executado, por exemplo, no EURUSD, e outra ferramenta cuja janela não está aberta há muito tempo é inserida nas configurações (para que o histórico não esteja lá), o histórico aparece.

Portanto, ainda RefreshRates() refere-se ao servidor e preenche o histórico. Como conseqüência, é necessário controlar a chegada da história.

O suporte diz que nenhuma das funções se refere diretamente ao servidor. Então, tudo é feito através do terminal :-)


O nível de imaginação é impressionante. Por que os dados apareceram apenas para alguns símbolos (que não foram abertos), e não para todos eles na análise do mercado? Como a função RefreshRates() sabia que alguns símbolos deveriam ser atualizados e outros não?

Junko, pare de divagar.

 
lottamer:


não funciona. Produz todos os lucros disponíveis nas negociações em toda a história.

Aqui está a função original e eu não mudei nada nela, é claro

aqui está sua chamada e impressão

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_D1, 0));  
Print(   GetProfitFromDateInCurrency () );

Portanto, tudo está correto. Você "lê" a função linha por linha e entende como funciona, se estiver muito entediado para escrevê-la você mesmo, e tudo se encaixa...

Você tem um parâmetro de função:

iTime (NULL, PERIOD_D1, 0)

é ahora do último dia deabertura da barra, ou seja, todas as posições que forem fechadas antes da abertura da barra do dia atual serão calculadas e somadas! Isso faz sentido? Portanto, estabeleça outra barra, que é necessária ou seja lá o que for. Mas você tem que ver por si mesmo.

 
Integer:

Sim. Ele também não notou que tem MarketInfo() em seu Expert Advisor, não apenas RefreshRates().


Todas as outras funções:


DoubleToStr(iOpen(sTool, 0, i), Dígitos), ",
DoubleToStr(iLow(sTool, 0, i), Dígitos), ",
DoubleToStr(iHigh(sTool, 0, i), Dígitos), 0, i), Dígitos), " ",
DoubleToStr(iClose(sTool, 0, i), Dígitos), ",
DoubleToStr(iVolume(sTool, 0, i), 0), "\n");

Naturalmente, os dados serão atualizados.