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

 

Se lo sai, ci sono due linee, una che segue i nuovi massimi in una serie di candele, l'altra che segue i minimi. Quando la distanza tra le linee è più di 50, si deve tracciare una linea verticale. La linea verticale ha bisogno di una coordinata: il tempo. Come posso disegnare il tempo quando la distanza tra le linee sarà più di 50? Non mi viene in mente niente.

Volevo disegnare la linea verticale usando ObjectCreate... Se si può fare senza tempo, cosa si dovrebbe usare?
 
waitra >> :

Potrebbe esserci una funzione che semplicemente rileva che "non ci sono ancora ordini nella storia dell'EA"? - Questo sarebbe sufficiente.

Non lo so. Forse qualcuno qui può dircelo?

Penso che dovremmo cercare di modificare la funzione di Kim. Questo:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает количество позиций.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                            |
//|    sy - наименование инструмента   (""   - любой символ,  |
//|                                     NULL - текущий символ)          |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)               |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  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) kp++;
          }}}}}  return( kp);}

Cioè, invece di MODE_TRADES, prendi MODE_HISTORY - cioè l'ordine è selezionato tra gli ordini chiusi e cancellati.

Allora (cambiare il nome di f-i) :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY (string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}

Provatelo, - funzionerà o no?

 

Buon pomeriggio, amici.


Per favore, consigliatemi su questo.


Per esempio, ho bisogno di aprire una posizione quando una "candela di prezzo" ha attraversato una media mobile.

Finora, so solo come classificare i segnali quando una candela ha chiuso/aperto sopra/sotto la media mobile...

( iMA( .....) >Close[1] o iMA(....) >Open[0] )

Come posso entrare quando la candela attuale è già sopra/sotto la MA, invece di aspettare che quella attuale si chiuda e quella successiva si apra?


Grazie mille in anticipo.

 
Morzh09 >> :

Buon pomeriggio, amici.


Per favore, consigliatemi su questo.


Per esempio, ho bisogno di aprire una posizione quando una "candela di prezzo" ha attraversato una media mobile.

Finora, so solo come classificare i segnali quando una candela ha chiuso/aperto sopra/sotto la media mobile...

( iMA( .....) >Close[1] o iMA(....) >Open[0] )

Come posso entrare quando la candela attuale è già sopra/sotto la MA, invece di aspettare che quella attuale si chiuda e si apra la prossima, se è già sopra/sotto la MA?


Non so cosa farne.

Come ti piace?

iMA(....) >Open[0] ? - zero è la candela attuale.

 
rid >> :

Cosa non piace:

iMA(....) >Open[0] ? - zero è la candela corrente

è vero, ma, per esempio, ci sono casi in cui, dopo aver aperto sotto la MA, il prezzo poi (di solito sulle notizie) rompe la MA in una candela lunga e va su, giù....

Se usiamo il mio criterio di apertura, potremmo perdere tali mosse...

Pertanto, vorrei aprire una posizione se il prezzo è attualmente sopra/sotto la media, piuttosto che aspettare la chiusura di questa e l'apertura della prossima candela.

 

Questo potrebbe essere:

if (  iMA(.... .... , 1) >Close[1]  && iMA(.... ... , 0) < Open[0]  ) // продажа

(Se la MA della barra precedente è maggiore del prezzo di chiusura della barra precedente e la MA della barra attuale diventa inferiore al prezzo di apertura della barra attuale, allora vendi)

 

Ho pasticciato per due giorni e non riesco a capirlo. Ho preso il codice dal tutorial di Kovalev e ho provato ad aprire un ordine di acquisto e ho ottenuto la risposta "Errore 130".

Codice

nt f_Open_Ord(int Tip)
{
int Ticket, // Numero d'ordine
MN; // MagicNumber

double SL, // StopLoss (valore del prezzo relativo)
TP; // TakeProf (valore del prezzo relativo)
//--------------------------------------------------------------- 3 --
while(g_Mas_Tip[Tip]==0) // Finché .
{ //...nessun successo
if (SL<g_Level_new) // se meno del consentito...
SL=(g_Level_new+20); // ... allora ammissibile
if (TP<g_Level_new)
// Se meno del consentito...
TP=(g_Level_new+20); // .allora ammissibile
MN=TimeCurrent(); // Simple MagicNumber
f_Inform(13,Tip); // Messaggio sul tentativo di apertura
if (Tip==0) // Apriamo Buy
{
SL=Bid - SL*Point; // StopLoss (prezzo)
SL=NormalizeDouble(SL,Digits);
TP=Bid + TP*Point; // TakeProfit (prezzo)
TP=NormalizeDouble(TP,Digits);
Ticket=OrderSend(Symbol(),0,g_Lots_New,Ask,5,1.46500,1.47500,",MN);
err=GetLastError();
Comment("error number ",err);
if (Ticket>0) f_Inform(4);
//if (Ticket<0) f_Inform(25)

Tutto funziona correttamente, penso che l'errore non sia nel codice. DC-Broco/.

 

Sorri, è stato precipitoso. I valori 1.46500 e 1.47500 nella funzione OrderSend dovrebbero essere cambiati rispettivamente in SL e TP

 
VNG писал(а) >>

Sorri, è stato precipitoso. I valori 1.46500 e 1.47500 nella funzione OrderSend devono essere sostituiti rispettivamente con SL e TP

A cosa corrispondono SL e TP? Se è zero, come nel codice qui sopra, tutto è corretto. Dovrebbe essere generato un errore

 

Gli stop sono presi dalla variabile globale g_Level_new, che è calcolata come g_Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL )

Motivazione: