[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 39

 
forexnew:

Se você definiu inicialmente a relação de StartBalance para StarLots de acordo com os riscos definidos, então o valor patrimonial tem que ser determinado:

if(AccountEquity()<StartBalance) Top-up = (AccountBalance()+(StartBalance-AccountEquity()))*Novo Lote/StarLots

Isto é excluindo AccountCredit(). Se eu o entendi corretamente, é claro.


Uma fórmula já é dada ali:

Você podecalcular o volume necessário (adicional) usando a fórmula: V(extra)= (SumInv / Equity) * Lotes

Onde:
SumInv - Quantidade de novas adições - seu tamanho deve ser de alguma forma conhecido programmaticamente calculado para o momento específico do tempo (anteriormente conhecido),
Equidade - Equidade da conta no mesmo ponto no tempo - este valor é obtido a partir da função de obter informações sobre a conta de negociação:

double AccountEquity( ) 
Возвращает сумму собственных средств для текущего счета.  


Lotes - Volume de ativos adquiridos anteriormente (no início), digamos 1 lote.
Isto significa que, para corrigir posições, você precisa saber o valor da variávelSumInv...

Qual é a melhor maneira de resolver o cálculo programático desta variável, desde que ela não seja igual a zero?

 
Roman.:


A fórmula já está aí dada:

Você podecalcular o volume necessário (adicional) usando a fórmula: V(extra) = (SumInv / Equity) * Lotes

Onde:
SumInv - Quantidade de novas adições - seu tamanho deve ser de alguma forma conhecido programmaticamente calculado para o momento específico do tempo (anteriormente conhecido),
Equidade - Equidade da conta no mesmo ponto no tempo - este valor é obtido a partir da função de obter informações sobre a conta de negociação:


Lotes - Volume de ativos adquiridos anteriormente (no início), digamos 1 lote.
Isto significa que, para corrigir posições, você precisa saber o valor da variávelSumInv...

Qual é a melhor maneira de resolver o cálculo programático desta variável, desde que ela não seja zero?

Não sei em que basear seus cálculos se você não souber em quantos lotes quer aumentar seu lote inicial. Este é um fator puramente humano:

SumInv = "Eu quero aumentar meu saldo em x libras" + StartBalance-Equity

Ou você não conhece o equilíbrio inicial ideal em que pode confiar? Tem que ser calculado com base no tamanho das paradas e na alavancagem.

Em minha EA, todos os cálculos são baseados no tamanho das paradas, daí o equilíbrio inicial ótimo (não é necessariamente igual ao equilíbrio inicial), e então há um cálculo automático do lote inicial.


 
forexnew:

Não sei com o que começar quando não se sabe quantos lotes se quer aumentar o lote inicial. Este é um fator puramente humano:

SumInv = "Eu quero aumentar meu saldo em x libras" + StartBalance-Equity

Ou você não conhece o equilíbrio inicial ideal? Tem que ser calculado a partir do tamanho das paradas e da alavancagem.

No meu EA, todos os cálculos são baseados no tamanho das paradas, daí o equilíbrio inicial ótimo (não é necessariamente igual ao equilíbrio inicial), e depois vai o cálculo automático do lote inicial.


Tudo é conhecido. O lote inicial é aumentado na proporção dos depósitos feitos de acordo com a fórmula acima. Mais uma vez, leia o link para ler as informações - ajustes no volume da posição ao depositar/retirar fundos.
Você, se estiver no tópico - basta tentar responder à pergunta: Como determinar o software (usando um algoritmo, ou qualquer fórmula, se você não puder diretamente à função de informação da conta ) - houve algum acréscimo a uma conta de negociação em que horário (anteriormente conhecido) durante o dia (digamos, às 00 horas). As outras variáveis para o cálculo do volume adicional na fórmula acima, necessárias para completar a anterior (inicial), são conhecidas.

Rapazes, digam-me...

 
Roman.:

Tudo isso é conhecido. O lote inicial é aumentado na proporção dos depósitos feitos de acordo com a fórmula acima. Mais uma vez, leia o link info - ajustes para posicionar o volume no depósito/saque.
Você, se estiver no tópico - basta tentar responder à pergunta: Como determinar o software (usando um algoritmo, ou qualquer fórmula, se você não puder diretamente à função de informação da conta) - se houve alguma adição a uma conta de negociação a qualquer hora (anteriormente conhecida) durante o dia (digamos às 00 horas). As outras variáveis para o cálculo do volume adicional na fórmula acima, necessárias para completar a anterior (inicial), são conhecidas.

Rapazes, uma dica...

Agora está claro. Suponha que tenhamos que calcular programmaticamente se houve um reabastecimento/retirada no último dia. Estou anexando o indicador. Você só precisa entrar o saldo que estava no início do período de tempo de cálculo e o número de dias de cálculo. Espero agora entendê-lo corretamente.

Arquivos anexados:
balans_9.mq4  6 kb
 

Olá a todos!

Estou com meu indicador novamente. A conselho de meus velhos amigos, tentei construir um loop que calcula o valor de um ponto de linha e preencher a matriz do indicador com esses valores.

Parece acertá-lo um a um. Juntos, ele pendura o terminal :=(

//for (i=Vnf2;i>0;i--)

// {int k=Vnf2;

// ArrayResize(Buf_DN,Vnf2+1);

// Buf_DN[i]= EquationDirect(Vnf2,VMF2,Vnf1,VMF1,k);

// k--;

// }

 

Um pequeno erro, mas ainda paira nesta variante

int k=Vnf2;

para (i=Vnf2;i>0;i--)

// {

// ArrayResize(Buf_DN,Vnf2+1);

// Buf_DN[i]= EquationDirect(Vnf2,VMF2,Vnf1,VMF1,k);

// k--;

// }


 
Вопрос:  как сделать так ,чтобы эксперт мог открыть только одну позицию?

int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }
      }
    }
  }
  return(ko);

}

использую это примерно так:

if(NumberOfOrders(NULL)==0)
            {
            Print("Вошли в цикл");
            
             
                  Print("Покупаю");
                  NumderOrder=OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-50*Point,Ask+50*Point,"1",0,0,Red);
                  Print(GetLastError());

                  }

В результате он все равно открывает несколько подряд не закрыв старую. Не могу понять в чем дело. Помогите плиз.

 
nuan:
if (ot>1      У ордеров  Buy ot=0, мож в этом дело?
 
nuan:
Você está usando as funções de Igor Kim. Ele tem definições para ordens e posições. As ordens são ordens pendentes e as posições são posições de mercado.
Você está tentando calcular o número de ordens pendentes , não o número de posições em aberto no mercado.
 
Muito obrigado.