[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 50

 
Zhunko:
O marco alemão, o ecu e o euro foram levados em conta. Pensei que todos sabiam disso.

Acontece que nem todos... :(

É estranho... Uma marca é uma marca - não é um euro... Bem, esqueça... Vamos levar esse fato em conta...

 
Notter:

Boa tarde a todas as boas pessoas,

Pergunta sobre o comércio com fortes movimentos. A função OrderSend tem o parâmetro de escorregamento - escorregamento máximo do preço do pedido. Há alguma limitação em seu valor? Ou podemos definir para 1000 pontos? O valor "0" significa deslizamento zero ou este parâmetro não é considerado ao abrir o pedido?

Além disso, em caso de um movimento forte, minha ordem de mercado enviada do terminal de meu cliente chegará ao servidor e aguardará a execução de ordens pendentes que são colocadas no servidor independentemente de seus preços ou será executada imediatamente ao preço de mercado no momento de seu recebimento? Em outras palavras, posso esperar que a ordem seja executada antes do intervalo ou ela será aberta somente no início da correção?

Slippage é a diferença em pontos entre o preço do pedido em seu terminal e o preço devolvido pelo servidor. Enquanto eles estão pensando nisso, o preço também pode se afastar. Quando há um movimento forte, o servidor normalmente diminui a velocidade. Quanto mais ele se reproduzir, menos chances você tem de abrir ao preço postado e, portanto, a um preço melhor para você. Se você definir um deslize de 1000 pips, você abrirá... no final da mudança. Isto é lucrativo para as empresas de corretagem. E quanto mais "cozinha :)", mais tempo o servidor vai "pensar", sobrecarregando você com solicitações e assim por diante.

Ao definir o parâmetro de deslizamento para 0, você abrirá somente se o preço do pedido e o preço devolvido pelo servidor forem idênticos.

 

Feliz Ano Novo!

Escrevi um código que deve encontrar o máximo e o mínimo dentro de um determinado período de tempo dentro de um dia. Mas, na verdade, algo não funciona. Por favor, dê uma olhada.

//+------------------------------------------------------------------+
//|                                                     +Session.mq4 |
//|                                       Copyright 2012, silhouette |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, silhouette"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#include <+ChartTrendLineCreate.mqh>

string OpenTime="00:00"; // время открытия сессии
string CloseTime="09:00"; // время закрытия сессии
int Days=100; // количество расчитываемых дней

//+------------------------------------------------------------------+
string Symb;
int i;
bool Ans;
//+------------------------------------------------------------------+
int init()
  {
   Symb=Symbol();
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   //+------------------------------------------------------------------+
   datetime Time_OD, H1_OS, H1_CS; 
   int H1_OpenDayShift, H1_OpenSessionShift, H1_CloseSessionShift, Hst, Lst;
   string H1_OD;
   double Maximum, Minimum;
   //+------------------------------------------------------------------+
   for(i=0; i<100; i++) // перебираем дни
    {
     Time_OD=iTime(Symb,PERIOD_D1,i); // находим дату открытия выбранного бара
     H1_OpenDayShift=iBarShift(Symb,PERIOD_H1,Time_OD,false); // ...его индекс
     
     H1_OD=TimeToStr(Time_OD,TIME_DATE); 
     
     H1_OS=StrToTime(H1_OD+" "+OpenTime);
     H1_OpenSessionShift=iBarShift(Symb,PERIOD_H1,H1_OS,false); // ...индекс бара открытия сессии
     H1_CS=StrToTime(H1_OD+" "+CloseTime);
     H1_CloseSessionShift=iBarShift(Symb,PERIOD_H1,H1_CS,false); // ...индекс бара закрытия сессии
     
     // ... максимум и минимум
     Hst=iHighest(Symb,PERIOD_H1,MODE_HIGH,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Lst=iLowest(Symb,PERIOD_H1,MODE_LOW,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Maximum=iHigh(Symb,PERIOD_H1,Hst);
     Minimum=iLow(Symb,PERIOD_H1,Lst);
     
     ChartTrendLineCreate(H1_OS, Maximum, H1_CS, Maximum, Red);
     ChartTrendLineCreate(H1_OS, Minimum, H1_CS, Minimum, Red);
     
     
    }

   return(0);
  }

 
silhouette:

Feliz Ano Novo!

Escrevi um código que deve encontrar o máximo e o mínimo do período de tempo especificado dentro do dia. Mas, na verdade, algo não funciona. Por favor, dê uma olhada.

Tente H1_OpenSessionShift-H1_CloseSessionShift +1
 
Mislaid:
Tente H1_OpenSessionShift-H1_CloseSessionShift +1
Obrigado, agora ele encontra tudo como deveria.
 
Você pode me dizer como fazer um EA para fazer pedidos a cada 4 horas na TF D1? Agora eu tenho que mudar manualmente para um pequeno TF e definir uma ordem se os sinais indicadores coincidirem com D1. É cansativo e inconveniente.
 
sultonov:
Se eu quisesse perguntar como eu poderia definir um EA na TF D1 para fazer pedidos a cada 4 horas, por exemplo? Se meu sinal indicador for o mesmo que em D1, então eu tenho que ir manualmente para a pequena TF e fazer o pedido. É cansativo e inconveniente.

Feliz Ano Novo, Yusuf!!!

Para isso, você precisa prescrever explicitamente as condições em sua EA, incluindo o acompanhamento do tempo para definir os pedidos, você pode controlar uma nova barra na TF H4 para permitir que ela funcione.

No seu caso, o que impede que a EA seja anexada à tabela de símbolos no H4 e obtenha sinais para abrir ordens usando D1 e definindo-os explicitamente no código expa?

P.S. E quanto a você? Você não bebe álcool ou algo assim?

É 2 de janeiro aqui - beba e beba! :-)

 

Eu escrevi uma função que deve encontrar o TP por Fibo:

//+-------------------------------------------------------------------------------------+
//| Вычисление ТП по Фибе                                                               |
//+-------------------------------------------------------------------------------------+
double GetProfitByFibo()
{
  double minValue, maxValue;
  
 // if(GetStateMa() == MA_TALKING_LONG)
    if(OrderType() == OP_BUYSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftB);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftB);
     
      if((maxValue - minValue) >= 7*pt)
      {
      double fibo1618 = NormalizeDouble((minValue + (maxValue - minValue)*1.618),Digits);
      }
   
    }
  
 // if(GetStateMa() == MA_TALKING_SHORT)
    if(OrderType() == OP_SELLSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftS);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftS);
 
      if((maxValue - minValue) >= 7*pt)
      {
      fibo1618 = NormalizeDouble((maxValue - (maxValue - minValue)*1.618),Digits);
      }
          
  }
  return(fibo1618);
}

As variáveis externas para esta função estão aqui:

extern string ___H2 = "_____  Параметры для функции Fibo_TP _____";
extern int i_ExtremumLookingTF = 5,
           i_maxValueShiftB = 8,
           i_minValueShiftB = 3,
           i_maxValueShiftS = 3,
           i_minValueShiftS = 8;

Eu inseri esta função em vez de um Take Profit fixo em uma EA funcional e a EA começa a empatar. O que pode estar errado?

Periodicamente, ao modificar um pedido, o TP não é definido de forma alguma.

Esta é uma função de compra, por exemplo (comentei a função de modificação anterior):

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  int ticket = -1;
  string myNote = "Сов баянул";
  
  double price = High[1] + i_thresholdFromInput*pt;
  double SL = Low[1] - i_thresholdFromBasedSL*pt ;

  if(price > Ask)
  {
    ticket = OrderSend(Symbol(),OP_BUYSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,0,Navy);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  //  if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(High[1] + i_tp*pt,Digits),0,Navy))
//  Print("GetProfitByFibo() = ", GetProfitByFibo());
      if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),GetProfitByFibo(),0,Navy))
    return(false);
  
  return(true);
}
 
double GetOrderOpenPrice(string sy="NULL", int op=-1, int mn=-1)
{
datetime t;
double r=0;
int i, k=OrdensTotal();

if (sy==="0") sy=Symbol();
for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==sy ||| sy=="")
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (op<0 ||| OrderType()==op)
{
if (mn<0 || OrderMagicNumber()==mn)
{
if (t<OrderOpenTime())
{
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}
} return(r);

}


Esta função verifica o preço de abertura do último pedido.

Como escrever esta condição na chamada de função: Se o preço subiu ou desceu 75 pips em relação ao último preço de ordem aberta, continuaremos trabalhando.

 

Olá!

O arquivo anexo contém um EA da Voldemar. Infelizmente, ele não está respondendo em particular e eu gostaria de corrigi-lo o mais rápido possível.

Como posso mudar as condições de abertura do pedido? No momento, o EA está definido para o preço de rollback. Queremos que ele abra com base na última barra. Se o preço fechado for inferior ao aberto, abrirá uma venda e vice versa.

Obrigado

Arquivos anexados:
Razão: