[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 50

 
Zhunko:
Il marco tedesco, l'ecu e l'euro sono stati presi in considerazione. Pensavo che tutti lo sapessero.

Si scopre che non tutti... :(

È strano... Un marchio è un marchio - non è un euro... Beh, lascia perdere... Terremo conto di questo fatto...

 
Notter:

Buon pomeriggio a tutte le brave persone,

Domanda sul trading con forti movimenti. La funzione OrderSend ha il parametro slippage - slittamento massimo dal prezzo dell'ordine. Ci sono limitazioni al suo valore? O possiamo impostarlo a 1000 punti? Il valore "0" significa zero slippage o questo parametro non viene preso in considerazione quando si apre l'ordine?

Inoltre, in caso di un forte movimento, il mio ordine a mercato inviato dal mio terminale client raggiungerà il server e aspetterà l'esecuzione degli ordini pendenti che si trovano sul server indipendentemente dai loro prezzi o sarà eseguito immediatamente al prezzo di mercato al momento della sua ricezione? In altre parole, posso aspettarmi che l'ordine venga eseguito prima della rottura o verrà aperto solo all'inizio della correzione?

Lo slippage è la differenza in punti tra il prezzo dell'ordine nel tuo terminale e il prezzo restituito dal server. Mentre ci pensano, il prezzo può anche allontanarsi. Quando c'è un forte movimento, il server di solito rallenta. Più cova, meno possibilità hai di aprire al prezzo pubblicato, e quindi ad un prezzo migliore per te. Se si imposta uno slippage di 1000 pip, si aprirà... alla fine del trasferimento. Questo è redditizio per le società di intermediazione. E più "cucina :)", più a lungo il server "penserà", sovraccaricandovi di requotes e così via.

Impostando il parametro slippage a 0, si aprirà solo se il prezzo dell'ordine e il prezzo restituito dal server sono identici.

 

Buon anno!

Ho scritto del codice che dovrebbe trovare il massimo e il minimo del lasso di tempo specificato in un giorno. Ma in realtà qualcosa non funziona. Per favore, dategli un'occhiata.

//+------------------------------------------------------------------+
//|                                                     +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:

Buon anno!

Ho scritto del codice che dovrebbe trovare il massimo e il minimo del periodo di tempo specificato all'interno del giorno. Ma in realtà qualcosa non funziona. Per favore, dategli un'occhiata.

Prova H1_OpenSessionShift-H1_CloseSessionShift +1
 
Mislaid:
Prova H1_OpenSessionShift-H1_CloseSessionShift +1
Grazie, ora trova tutto come dovrebbe.
 
Potete dirmi per favore come fare un EA per piazzare ordini ogni 4 ore su TF D1? Ora devo passare manualmente al piccolo TF e impostare un ordine se i segnali dell'indicatore coincidono con D1. È fastidioso e scomodo.
 
sultonov:
Se volessi chiedere come potrei impostare un EA su TF D1 per piazzare ordini ogni 4 ore, per esempio? Se il segnale del mio indicatore è lo stesso che su D1, allora devo andare manualmente sul piccolo TF e piazzare l'ordine. È noioso e scomodo.

Buon anno, Yusuf!!!

Per questo è necessario prescrivere esplicitamente le condizioni nel tuo EA, compreso il tracciamento del tempo per impostare gli ordini, è possibile controllare una nuova barra su TF H4 per permettergli di lavorare.

Nel tuo caso, cosa impedisce all'EA di essere attaccato al grafico del simbolo su H4 e di ottenere segnali per aprire ordini usando D1 e impostandoli esplicitamente nel codice dell'expa?

P.S. E tu? Non bevi alcolici o altro?

Qui è il 2 gennaio - bevi e bevi! :-)

 

Ho scritto una funzione che dovrebbe trovare il TP per 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);
}

Le variabili esterne per questa funzione sono qui:

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

Inserisco questa funzione al posto di un Take Profit fisso in un EA funzionante e l'EA inizia a bloccarsi. Cosa può esserci di sbagliato?

Periodicamente, quando si modifica un ordine, il TP non viene impostato affatto.

Questa è una funzione per l'acquisto, per esempio (ho commentato la funzione di modifica precedente):

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
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=OrdersTotal();

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);

}


Questa funzione controlla il prezzo di apertura dell'ultimo ordine.

Come scrivere questa condizione nella chiamata della funzione: Se il prezzo si è spostato in alto o in basso di 75 pip dal prezzo aperto dell'ultimo ordine, continueremo a lavorare.

 

Ciao!

Il file allegato contiene un EA di Voldemar. Purtroppo non risponde in privato e vorrei correggerlo al più presto.

Come posso cambiare le condizioni di apertura dell'ordine? Al momento, l'EA è impostato sul prezzo di rollback. Vogliamo che si apra sulla base dell'ultima barra. Se il prezzo di chiusura è inferiore a quello di apertura, si aprirà una vendita e viceversa.

Grazie

File: