Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 27

 
Movlat Baghiyev:
A condição de fechamento utiliza um sinal inverso, mas não funciona yNossos negócios só são fechados em stop ou takei. Qual é o seu motivo?

Errado.
Sua condição deve estar no início e a função de fechamento por trás do início.

int i;
// 
void Start(){

if ((FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) // тут так надо бы Bid<NormalizeDouble(FMA1-Distanse*GetPoint(),Digits)
   || (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint())){
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL)  CloseOpBuySell(); // тут закроются все ордера и бай и селл
    }
  }

}// end start

void CloseOpBuySell()

for(i=0;i<OrdersTotal();i++) 
  { 
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
   { 
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic ) //свой магик
    { 
      if(OrderType()==OP_BUY
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,LawnGreen);  {continue;}
        } 
      if(OrderType()==OP_SELL
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,LawnGreen);  {continue;}
        } 
      } 
    } 
  } 
  return;
  }

Se você tiver que fechar em condições separadas, e não todas de uma vez, então a função de fechamento deve ser diferente.
 
Natashe4ka:

Errado.
Você deve ter a condição no início e a função de fechamento no início.

Se você precisar fechar por condições individuais e não todas de uma vez, então a função de fechamento deve ser diferente.

Certo, mas eu já o fiz e o enviei a ele, então ele não vai dizer nada.

int start()
{
    //закрытие по МА-шкам
   if (FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) CloseOpBuySell("BUY");
   if (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint()) CloseOpBuySell("SELL");
  return(0);
}
//----
//-----------------------------------+

void CloseOpBuySell(string TypeClose)
   {
      for(int i=0;i<OrdersTotal();i++)
         {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
               {
                   if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn )
                      {
                        if(TypeClose=="BUY")
                          {
                              if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3,LawnGreen);
                           }
                        if(TypeClose=="SELL")
                          {
                              if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3,LawnGreen);
                          }
                     }
               }
         }
   }
 
Renat Akhtyamov,Natashe4ka, muito obrigado.

 
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
É assim que o lote é calculado.MaximumRisk==100 . Preciso que o lote seja calculado automaticamente até o máximo .Eu escrevi MaximumRisk==100 para calcular o lote máximo possível na abertura comercial. Quantas vezes é correto?
 
Movlat Baghiyev:
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
Aqui está uma variante de cálculo de lote.MaximumRisk==100 . Preciso que seja calculado automaticamente para cada lote .Eu prescrevi MaximumRisk==100 para calcular o lote máximo possível na abertura comercial.

É melhor contar com base nos fundos disponíveis do que com base no saldo. Caso contrário, você corre o risco de receber muito mais do que pode pagar no momento da abertura de uma negociação.

Você também precisa calcular a dependência da etapa do lote e, em seguida, verificar se o lote está dentro dos lotes máximo e mínimo permitidos na conta.

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
 
Vitalie Postolache:


Já está. Obrigado. Vamos ver o que acontece.
 
Vitalie Postolache:

É melhor contar com base nos fundos disponíveis do que com base no saldo. Caso contrário, você corre o risco de receber muito mais do que pode pagar no momento da abertura de uma negociação.

Você também precisa calcular a dependência da etapa do lote e, em seguida, verificar se o lote está dentro dos lotes máximo e mínimo permitidos na conta.

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
Esta opção não funciona como deveria... Abrir um negócio com o máximo lote possível, e depois de fechar o segundo não abre o segundo não escreve o dinheiro suficiente...
 

Adiado:

Gevorg Hakobyan, 2016.12.08 15:26

Olá. Como posso obter uma lista de todos os pares de moedas existentes no Meta Trader 4? E como posso me manter a par de quaisquer mudanças na lista?
 
Vladimir Karputov:

Adiado:

Gevorg Hakobyan, 2016.12.08 15:26

Olá. Como posso obter a lista de todos os pares de moedas existentes no Meta Trader 4? E como estar ciente de qualquer mudança na lista?

SymbolsTotal

Retorna o número de símbolos disponíveis (selecionados em MarketWatch ou todos).

intSymbolsTotal(
bool selecionado// verdadeiro - somente símbolos em MarketWatch
);

Parâmetros

selecionado

[em] Modo de solicitação. Pode aceitar valores verdadeiros ou falsos.

Valor retornado

Se selecionado é verdadeiro, o número de caracteres selecionados no MarketWatch é devolvido. Se falso, ele retorna o número total de todos os símbolos.

 
Vladimir Karputov:

Adiado:

Gevorg Hakobyan, 2016.12.08 15:26

Olá. Como posso obter uma lista de todos os pares de moedas existentes no Meta Trader 4? E como estar ciente de qualquer mudança na lista?
E pelo que é transferido, é impossível escrever um código que funcione em todas as plataformas, não há diferença na tarefa de obter os símbolos nas duas plataformas.
Razão: