Envio de Ordens

Henrique Gomes  

Boa tarde, Estou com uma duvida. Como eu poderia escrever esse EA para toda vez que o preço estiver 10 pontos acima da média ele executar a orden de entrada??


#include <Trade\Trade.mqh>

CTrade trade;


void OnTick()

  {

      double ask, bid, last;

      double smaArray[];

      int smaHandle;

      

      ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

      bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

      last = SymbolInfoDouble(_Symbol, SYMBOL_LAST);

      

      smaHandle = iMA(_Symbol, _Period, 5, 0, MODE_EMA, PRICE_CLOSE);

      ArraySetAsSeries(smaArray, true);

      CopyBuffer(smaHandle, 0, 0, 3, smaArray);

      

      if(last=smaArray[0] && PositionsTotal()==0)

         {

            Comment("Compra");

            trade.Buy(1, _Symbol, ask, ask-500, ask+120, "");

         }

        

  }



Como vcs estao vendo toda vez que o preço estiver igual ele entra, mas gostaria de fazer um ajuste para quando ele for IGUAL 10 ou 15 pontos acima da media e nao somente quando esiver acima da pedia. alguem poderia me ajudar

Jonathan Pereira  
Henrique Gomes:

Boa tarde, Estou com uma duvida. Como eu poderia escrever esse EA para toda vez que o preço estiver 10 pontos acima da média ele executar a orden de entrada??


#include <Trade\Trade.mqh>

CTrade trade;


void OnTick()

  {

      double ask, bid, last;

      double smaArray[];

      int smaHandle;

      

      ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

      bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

      last = SymbolInfoDouble(_Symbol, SYMBOL_LAST);

      

      smaHandle = iMA(_Symbol, _Period, 5, 0, MODE_EMA, PRICE_CLOSE);

      ArraySetAsSeries(smaArray, true);

      CopyBuffer(smaHandle, 0, 0, 3, smaArray);

      

      if(last=smaArray[0] && PositionsTotal()==0)

         {

            Comment("Compra");

            trade.Buy(1, _Symbol, ask, ask-500, ask+120, "");

         }

        

  }



Como vcs estao vendo toda vez que o preço estiver igual ele entra, mas gostaria de fazer um ajuste para quando ele for IGUAL 10 ou 15 pontos acima da media e nao somente quando esiver acima da pedia. alguem poderia me ajudar

Opa boa tarde,


Tente esse calculo, eu usei ask mas pode ser usado com bid last, ou qq preço que passe e queira calcular uma distancia.

//+------------------------------------------------------------------+
//|                                                        ajuda.mq5 |
//|                                      Copyright 2020,Lethan Corp. |
//|                           https://www.mql5.com/pt/users/14134597 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020,Lethan Corp."
#property link      "https://www.mql5.com/pt/users/14134597"
#property version   "1.00"

#include <Trade\Trade.mqh>
CTrade trade;
double smaArray[];
int smaHandle;
double step = 50;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
 {
//---

  smaHandle = iMA(Symbol(), Period(), 5, 0, MODE_EMA, PRICE_CLOSE);
  ArraySetAsSeries(smaArray, true);
//---
  return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 {
//---

 }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()

 {


  double ask, bid, last;

  ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
  bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);
  last = SymbolInfoDouble(Symbol(), SYMBOL_LAST);
  
  Print(" Ask->", ask, " Ask+step->",NormalizePrice(ask+PriceStep()*step));

  CopyBuffer(smaHandle, 0, 0, 3, smaArray);

  if(last=smaArray[0] && PositionsTotal()==0)

   {
    Comment("Compra");

    trade.Buy(1, Symbol(), ask, ask-500, ask+120, "");

   }
 }
//+------------------------------------------------------------------+
double NormalizePrice(const double price)
 {
  double m_tick_size;
  SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE,m_tick_size);
  int m_digits=(int)SymbolInfoInteger(Symbol(), SYMBOL_DIGITS);

  if(m_tick_size!=0)
    return(NormalizeDouble(MathRound(price/m_tick_size)*m_tick_size,m_digits));
//---
  return(round(NormalizeDouble(price,m_digits)));
 }
//
double PriceStep(void)
 {
  double price = SymbolInfoDouble(Symbol(), SYMBOL_POINT);
  return price;
 }
//+------------------------------------------------------------------+
Cristian Quiroga  
Bom dia pessoal

tenho este codigo
eu gostaria que cada vez que o preço fosse contra
ele comprasse mais um pouco com novo take

no caso
minha conta a hedge

a ideia e que ficasse varia ordens abertas



#include <Trade\Trade.mqh>
CTrade trade;

double   ask, bid, last;
double   smaArray[];
int      smaHandle;

int OnInit()
  {
      smaHandle = iMA(_Symbol, _Period, 2, 0, MODE_SMA, PRICE_CLOSE);
      ArraySetAsSeries(smaArray, true);
      
      trade.SetTypeFilling(ORDER_FILLING_RETURN);
      trade.SetDeviationInPoints(500);
       
      return(INIT_SUCCEEDED);
  }

void OnTick()
  {    
      ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
      last = SymbolInfoDouble(_Symbol, SYMBOL_LAST);
      
      CopyBuffer(smaHandle, 0, 0, 3, smaArray);
      
      if(last>smaArray[0] && PositionsTotal()==0)
         {
            //Comment("Compra");
            trade.Buy(0.05, _Symbol, ask, ask-1500, ask+500, "");
            
         }
      else if(last<smaArray[0] && PositionsTotal()==0)
         {
           
         }
   
  }
Razão: