Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 65

 

Aqui está o próprio perito - limpou as coisas desnecessárias - houve muita batida :)

Arquivos anexados:
 

Como é que fecho uma encomenda?

Abri-a desta forma:

mrequest.action = TRADE_ACTION_DEAL; // execução imediata

mrequest.price = NormalizeDouble(Ask,_Digits); // último Ask price

mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digitos); // Parar Perda

pedido.tp = 0; // Tirar Lucro

mrequest.symbol = _Símbolo; // símbolo

pedido.volume = Lotes; // número de lotes a comercializar

pedido.magia = 1; // Número mágico

mrequest.type = ORDER_TYPE_BUY; // ordem de compra

mrequest.type_filling = ORDER_FILLING_FOK; // tipo de encomenda - tudo ou nada

pedido.desvio=100; // deslizamento em relação ao preço actual

OrderSend(mrequest,mresult);

A questão é que temos mais do que uma ordem aberta, e precisamos de fechar uma ordem selectiva...

 
Forex_Noob: Como fechar uma encomenda?

A questão é que não há uma ordem aberta, mas várias, e precisamos de fechar selectivamente...

1. Inserir o código correctamente.

2. Se várias ordens forem abertas numa direcção, o resultado é uma posição agregada.

3. Para fechar uma posição aberta deve colocar ordens dirigidas ao contrário, cujo volume agregado é igual ao volume da posição a ser fechada.

4. Se for necessário fechar apenas uma parte de uma posição, então é necessário expor ordens dirigidas de forma oposta com o volume agregado correspondente.

 
Yedelkin:

1. Inserir o código correctamente.

2. Se várias ordens forem abertas na mesma direcção, o resultado é uma posição agregada.

3. Para fechar uma posição aberta deve colocar ordens dirigidas ao contrário, cujo volume agregado é igual ao volume da posição a ser fechada.

4. Se apenas parte de uma posição precisar de ser fechada, então devem ser colocadas encomendas opostas com o volume agregado correspondente.

ok. obrigado. O único problema agora é que as posições nem sempre são fechadas através de uma ordem de fecho...
 
Forex_Noob:
OK. Obrigado. Só que agora outro problema - a ordem de fecho nem sempre fecha as posições...
Ver no livro de registo - os resultados são aí registados.
 

Yedelkin,Reshetov,

Olá,

Qual é o método mais fácil de extrair dados de um indicador para vários pares?

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
Obrigado de antemão.
 
mario065: Qual é o método/método mais fácil de obter dados de um indicador para vários pares?

É a isto que se refere?

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

Refere-se a isto?

Hi,

Claro que não.

Se houver mais do que um peru, é preciso fazer para cada um tantos pares quantos os que ele come.

Um manipulador para utilizar todos os pares.

 
mario065: Se existem vários indicadores, para cada um deles é necessário fazer tantas vezes quanto o número de pares que se alimentam. Um manipulador para usar todos os pares.

Então quer ter uma pega, mas o indicador iATR funciona com caracteres diferentes?

A partir da descrição do indicador iATR, pode-se ver que foi concebido para funcionar apenas com um símbolo. Portanto, para trabalhar com 4 caracteres, é necessário executar 4 cópias do indicador iATR . Por sua vez, o cabo indicador é necessário para aceder aos valores da cópia indicadora específica, e se estiver a executar 4 cópias indicadoras, terá de guardar as pegas apropriadas algures.

Se a questão de utilizar apenas um cabo for principal, teremos de reescrever o indicadoriATR para quefuncione com vários símbolos ao mesmo tempo, tenha o número correspondente de matrizes de valores, etc.Depois será possível utilizar uma pega

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

e utilizá-lo para endereçar a este ou aquele tampão indicador do myATR.

 

Pode também escrevê-lo assim (esquematicamente):

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }
Razão: