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

 
Mihail Matkovskij #:

Como você calcula o tp?

Eu especifico na variável duplo tp=50;

 
Roman Epifanov #:

Eu especifico na variável duplo tp=50;

double takeProfit;
takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
 
Mihail Matkovskij #:

agora escreve

2021.12.04 13:56:09.509 TestGenerator: erro de dados inigualável (valor alto 1.13110 em 2021.12.03 23:45 não é alcançado a partir do menor período de tempo, preço alto 1.13104 desajustes)


//+------------------------------------------------------------------+
//|                                                         repa.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   tp = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   double lot=0.01;
   while (i<OrdersTotal())
   {
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней
   if (Close[0]<ema)trend=true ;else if(Close[0]>ema)trend=false; //определили тренд
   
   if (Close[1]<Open[1]) {OrderSend(Symbol(),OP_SELL,lot,Bid,2,Ask+sl,tp,"Candle sell, Close[0]<MA");};
   
   
  }
//+------------------------------------------------------------------+
 
Mihail Matkovskij #:

coloque por um minuto... funciona...

mas o nível de parada é diferente -

1 2021.09.16 05:59 venda 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00


 
Roman Epifanov #:

agora escreve

2021.12.04 13:56:09.509 TestGenerator: erro de dados inigualável (valor alto 1.13110 em 2021.12.03 23:45 não é alcançado a partir do menor período de tempo, preço alto 1.13104 desajustes)


void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   double stopLoss, takeProfit, openPrice;
   double lot=0.01;
   while (i<OrdersTotal())
   {
     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
     lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней

   if (Close[0]<ema)
     trend=true ;
   else if(Close[0]>ema)
     trend=false; //определили тренд
    
   takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   stopLoss = NormalizeDouble(Bid + sl * Point(), Digits()); // SL для Sell
   openPrice = NormalizeDouble(Bid, Digits());

   if (Close[1]<Open[1]) {
     OrderSend(Symbol(), OP_SELL, lot, openPrice, 2, stopLoss, takeProfit, "Candle sell, Close[0]<MA");
   }
   
  }

Todas as regras são on-line, portanto, verifique você mesmo.

 
Mihail Matkovskij #:

Regras todas on-line, portanto, verifique você mesmo.

Obrigado!

 

Boa noite cavalheiros, poderiam informar por que o conselheiro dá um erro ao abrir a segunda ordem?


O texto do próprio assessor



//+----------------------Параметры-----------------------------------+

input int TakeProfit = 100; // Lucro em pips

input int StopLoss = 50; // Perda em pips

lote duplo de entrada = 0,01; // Lote inicial

entrada dupla Multilot = 1,95; // multiplicador para o lote inicial

input int Slippage =30; // Slippage

input int MagicNumber = 333 ; // Número único


//+------------------------------------------------------------------+

//| Função de iniciação de especialistas |

//+------------------------------------------------------------------+

duplo tp=0;

dupla sl=0;

int OnInit()

{

tp=NormalizeDouble(TakeProfit*Point(),Digits());

sl=NormalizeDouble(StopLoss*Point(),Digits());

return(INIT_SUCCEED);

}


//+------------------------------------------------------------------+

//| Função de carrapato de especialista |

//+------------------------------------------------------------------+

nulo OnTick()

{

//- o loop verifica as ordens abertas quando o Expert Advisor é ativado e as calcula.

int buy=0; //Número de pedidos de compra

int sell=0; //Número de ordens de venda


for(int i = OrderTotal()-1; i>=0; i--)

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))

if(OrderSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

{

if(OrderType()==OP_BUY)

comprar++;

if(OrderType()==OP_SELL)

venda++;

}


//- o laço recebe os dados da última ordem fechada quando a EA é ativada

int type=-1; //o tipo de uma ordem fechada

int history_close_orders=0; //número de ordens fechadas

lote duplo=0; //Lote do último pedido fechado

lucro duplo=0; // Lucro no qual o último pedido foi fechado

data hora=0; //hora de encerramento do último pedido


for(int i = OrderHistoryTotal()-1; i>=0; i--)

if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))

if(OrderSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

if(OrderCloseTime()>time)

{

história_fechar_ordens+++;

tempo = OrderCloseTime();//o último tempo de fechamento do pedido

lote= OrderLots();//Lote do último pedido fechado

type=OrderType();// Tipo do último pedido fechado

profit=OrderProfit()*OrderSwap()*OrderComission();//Profit do último pedido fechado

}

//calcule o lote com o qual a EA irá trabalhar

duplo Lotes_Lote de trabalho=0;// lote de trabalho


if(history_close_orders==0 || profit>0)// se não houver ordens fechadas ou a última ordem fechada sobre o lucro

Lote_Lote=Lote de trabalho;// lote de trabalho é igual ao lote inicial


if(history_close_orders>0 && profit<0) // se o último pedido for fechado no vermelho

Lots_Work=1;// lote de trabalho será igual ao lote da última ordem multiplicado pelo multiplicador


//abrir a primeira ordem de compra

if(buy==0 || lucro>0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "Expert Advisor Test Fair",MagicNumber,0,clrGreen);

if(bilhete<0)

Print("OrderSendido com erro #",GetLastError()));

senão

Imprimir ("OrderSend completed successfully");

}


// Abertura do segundo e dos pedidos de compra subseqüentes

if(buy==0 && type===OP_BUY && profit<0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "EA Test fair",MagicNumber,0,clrGreen);

if(bilhete<0)

Print("OrderSendido com erro #",GetLastError()));

senão

Imprimir ("OrderSend completed successfully");

}


// Abertura da primeira ordem de venda

if(venda==0 || lucro>0)

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "EA Test fair",MagicNumber,0,clrRed);

if(bilhete<0)

Print("OrderSendido com erro #",GetLastError()));

senão

Imprimir ("OrderSend completed successfully");

}

// Abertura do segundo e dos pedidos de compra subseqüentes

if(sell==0 && (type====OP_SELL && profit<0))

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "Expert Advisor Test Fair",MagicNumber,0,clrRed);

if(bilhete<0)

Print("OrderSendido com erro #",GetLastError()));

senão

Imprimir ("OrderSend completed successfully");

}


//--Modificar o pedido, adicionando Take Profit e Stop Loss

for(int i = OrderTotal()-1; i>=0; i--)

if(OrderSelect(i, SELECT_BY_POS))

if(OrderSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

{

if(OrderType()==OP_BUY)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits(),NormalizeDouble(OrderOpenPrice()+tp,Digits(),0,clrGreen))

Imprimir("OrderModify OK!");

senão

Print("OrderModify BUY failed #", GetLastError()));

}

if(OrderType()==OP_SELL)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits(),NormalizeDouble(OrderOpenPrice()-tp,Digits(),0,clrRed))

Imprimir("OrderModify OK!");

senão

Imprimir("OrderModify SELL failed #", GetLastError()));

}

}


}

//+------------------------------------------------------------------+


 
Meu antigo laptop com processador i3 ainda tinha WinXP 32 bit instalado, sem suporte MT5. Recentemente aumentei a memória para 6GB, quero instalar um SO de 64 bits que rodaria MT4 e MT5. O que é preferível - Win7 ou Win8.1 ?
 
atztek #:
Meu antigo laptop com processador i3 ainda tinha WinXP 32 bit instalado, sem suporte MT5. Recentemente aumentou a memória para 6GB, quer instalar um SO de 64 bits que rodaria MT4 e MT5. O que é preferível - Win7 ou Win8.1 ?

10

 
Andrey Sokolov #:

10

Esta versão é instalada em um novo laptop, entediado com atualizações constantes. Além disso, as pessoas escrevem que oito corridas são melhores do que dez em laptops antigos. Eu deixaria o WinXP no meu antigo laptop, mas o MT5 não rodará nele, além disso, 3Gb de memória não é suficiente para XP. Ainda assim, se a escolha for entre 7 e 8,1, o que é melhor para realizar otimizações no MT4/5 ?