[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 508

 

Olá.

Precisamos da função que calcula o lote em incrementos. O que seria possível ajustar, por exemplo, para cada 500 lotes de aumento

Então depo 1000 - lote 0,1

Depo 1500 - lote 0,15

2000 - lote 0,2

Favor afixar a função.

 

Bom dia! O que significa a condição de intervalo? Quando o preço sobe 35 pips, meu stoploss se move 10 pips abaixo do pedido, ou seja, sua distância do preço é de 45 pips.

Ou de que tipo de lacuna estamos falando?

 
T-G:

Olá.

Você precisa da função para calcular o lote de forma incremental. Isso seria possível para ajustar, por exemplo, para cada 500 aumentos de lote

Então depo 1000 - lote 0,1

Depo 1500 - lote 0,15

depo 2000 - lote 0,2

Favor afixar a função.


É possível sem funções:

extern double depo = 1000.0;

extern double lot    = 0.1; 

double Lot; 

//--------------------------------

int start()

//--------------------------------

double Equ = AccountEquity();

Lot  = NormalizeDouble(lot*Equ/depo,2);
 
T-G:

Olá.

Precisamos da função que calcula o lote de forma incremental. Isso seria possível para ajustar, por exemplo, para cada 500 aumentos de lote

Então depo 1000 - lote 0,1

Depo 1500 - lote 0,15

Depo 2000 - lote 0,2

Favor afixar a função.

Você poderia fazer desta maneira:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Расчитываем размер лота (ступенчато)                                       |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_Lots (double fd_BeginLot = 0.1,        // начальный размер лота
                  int fi_BeginDepo = 1000,         // начальный размер депозита
                  int fi_IncrementDepo = 500,      // приращение депозита
                  double fd_IncrementLot = 0.05)   // приращение лота
{
    double ld_Balance = AccountBalance();
//----
    if (ld_Balance < fi_BeginDepo + fi_IncrementDepo) return (fd_BeginLot);
    int li_K_Lot = (ld_Balance - fi_BeginDepo) / fi_IncrementDepo;
//----
    return (fd_BeginLot + fd_IncrementLot * li_K_Lot);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

apenas não se esqueça de normalizar o lote.

 
Emitiu um bilhete acima do início. Agora ele só modifica uma ordem, mas isso é outro erro! Caso contrário, a variável foi declarada dentro dos ifs.
 
Dimka-novitsek:

Bom dia! O que significa uma condição de intervalo? Quando o preço sobe 35 pips, meu stoploss se move 10 pips abaixo do pedido, ou seja, sua distância do preço é de 45 pips.

Ou de que tipo de lacuna estamos falando?


Bom dia, cabeça refrescada!

Enquanto estamos enviando, recebendo e executando uma ordem de modificação, o preço não está parado, para cima ou para baixo, quem sabe!

#include <stderror.mqh>
#include <stdlib.mqh> 
//-------------------

extern int prev = 30;//зазор! Для 5-знака!
extern int sl   = ??;
extern int tp   = ??;
//------------------
int start()
{
//------------------
//----------------------/  Stops & Trailing  \----------------------\\
  for(int i = 0; i < OrdersTotal(); i++)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() != Symbol() && OrderMagicNumber() != Magic) continue;
      if(OrderCloseTime() != 0) continue;
      if(OrderType() == OP_BUY)
      {
        if(OrderStopLoss() < OrderOpenPrice() || OrderStopLoss() == 0)
        {
//----------------------
          if(OrderStopLoss() == 0)
          if(Bid < OrderOpenPrice() && Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          if(Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          {
            SL = NormalizeDouble(OrderOpenPrice()-sl*Point,Digits);
            if(Bid < NormalizeDouble(OrderOpenPrice()+tp*Point-prev*Point,Digits))
            {
              TP = NormalizeDouble(OrderOpenPrice()+tp*Point,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,TP,0,Blue);return(0);
        } } }
//-----------------------
//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(3000); RefreshRates(); ModifyCnt++;
} } }

E para Sall é o contrário! Boa sorte para descobri-lo sem comentários, o que é redundante na minha opinião!

E, por favor, veja no dicionário explicativo russo, para que seus postos sejam mais legíveis.

Às vezes olho para cima, pois há mais de 10 anos venho pensando em uma língua diferente e não estou ciente de suas "inovações"... :))

 
Dimka-novitsek:

Boa tarde! Erro de modificação de pedido 4051. Estou pensando há uma hora. Parece ser o parâmetro certo aí!!! Resumidamente, nota por nota. O preço parâmetro é o preço de abertura do pedido, OrderOpenPrice(), é padrão.

Nosso preço de parada está 10 pontos abaixo do preço aberto, e memorizamos o preço. Nós o armazenamos na variável tsena ao abrir o pedido.

Temos dois pedidos, um com lucro e outro sem. Parece estar claro. Qual é o erro? O que mais poderia ser?

Sim, a condição parece ser clara, embora não seja realmente relevante. Isto é, o preço se moveu em 30 pontos, a condição funcionou (tsena+30*Point).

Estabelecemos perenos=verdadeiro uma vez; estas condições parecem funcionar de fato.

Eu não sei como pensar sobre isso.

Na verdade, usar uma vez perenos=verdadeiro; estas condições não precisavam ser observadas, pois não se usava em nenhum lugar.

Esta linha:

        int tacket = OrderSend (Symbol(), OP_BUY, lot, NormalizeDouble (Ask, Digits), 5, NormalizeDouble (Ask - (35 * Point), Digits), 
            NormalizeDouble (Ask + (45 * Point), Digits), NULL, 450, 0, CLR_NONE);

e depois usando (não neste tick) esta variável para modificar uma ordem com tick = 0 (a variável será redefinida), mostra que você não conhece o básico - comece com os conceitos de variáveis locais e globais.

E abrir uma cópia da ordem recém aberta após 2 segundos - ESTA É A PILOTAGEM MAIS ALTA!!! - estou chorando... :)))

 
OBRIGADO!!!
 
borilunad:

Você pode fazer isso sem funções:

Antes de apressar-se para responder, você deveria primeiro ter se preocupado em ler cuidadosamente as condições (o que a pessoa quer) e depois tomar e calcular os resultados de seu código.
Para começar, a conversa é sobre Depósito, e isto é AccountBalance(). Equ/depo é um número fracionário, e de que tipo de assombro podemos estar falando???
 
TarasBY:
Antes de se apressar para responder, você deve primeiro ler as condições cuidadosamente (o que a pessoa quer) e depois pegar os resultados de seu código e calculá-los.
Para começar, a conversa é sobre Depósito, e isto é AccountBalance(). Equ/depo é um número fracionário, e de que tipo de assombro podemos estar falando???

Suponho que aqui também a suavidade é mais apropriada do que o passo-a-passo. E quanto ao "o que o homem precisa", você sabe perfeitamente que ele ainda não está claro sobre o que precisa!