[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 376

 
C'è un modo per scoprire le commissioni per un ordine di 1 lotto senza aprire un ordine?
 
Reshetov:

OrdersTotal() dà il numero di posizioni già aperte, cioè potete usarlo per controllare se c'è già una posizione aperta o no.

Uso la funzione Terminal() del tutorial quando chiudo le posizioni, a condizione che Mas_Ord_New[0][0]!=0. Ma qui abbiamo un altro compito: dovremmo creare una bandiera che proibisca di negoziare con il segnale corrente se un ordine è già stato aperto da esso. Sto cercando di usare le bandiere, ma ho fatto un errore in qualche modo.

  
static bool buy_1=true;
   
if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг, запрещаем торговать по данному сигналу
       }


   
if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг, сигнал сменился - торговать по нему можно опять
       buy_l=true;
 

Parny ha bisogno di aiuto Cosa c'è

2012.09.10 18:40:20 '6257743': ordine buy 5.00 EURUSD apertura a 1.27816 sl: 1.27791 tp: 1.27876 fallito [S/L o T/P non valido]

Anche perché il prezzo e lo stop loss sono gli stessi:

Prezzo 1,25618 Stop Loss 1,25618 Take Profit 1,25698


Prendi profitto 60 pips

Stop Loss 20

 

Salve. Ho una domanda sugli indicatori personalizzati. La descrizione di iCustom dice:

doppio iCustom( simbolo stringa, int timeframe, nome stringa, ..., int mode, int shift)
Calcolo dell'indicatore personalizzato specificato. L'indicatore personalizzato deve essere compilato (file con estensione EX4) e collocato nelladirectory terminal_experts\indicators.
simbolo - Nome del simbolo, sui cui dati verrà calcolato l'indicatore. NULL significa simbolo corrente.
timeframe - Periodo. Può essere uno dei periodi del grafico. 0 significa il periodo del grafico corrente.
nome - Nome dell'indicatore personalizzato.
... - Elenco dei parametri (se necessario). I parametri trasmessi devono corrispondere all'ordine di dichiarazione e al tipo di variabili esterne (extern) dell'indicatore personalizzato.
modo - Indice della linea dell'indicatore. Può essere da 0 a 7 e dovrebbe corrispondere all'indice usato da una delle funzioni SetIndexBuffer.
turno - Indice del valore ottenuto dal buffer dell'indicatore (spostamento relativo alla barra corrente del numero specificato di periodi indietro).

Domanda: come ottenere il valore di "shift" (quando si chiama l'indicatore con uno shift, usa i valori come senza, cioèiCustom(NULL, 0, "nome",pam1,0,1)= iCustom(NULL, 0, "nome",pam1,0,100), ma se chiamo l'indicatore 100 barre fa, avrà un valore diverso da iCustom(NULL, 0, "nome",pam1,0,100). L'indicatore è semplice, usa 5 valori di chiusura precedenti e ne prende la media.

Vi sarò grato per il vostro aiuto.

 
paladin80:
Avete impostato la deviazione dalla linea principale a 0 (zero). Dovrebbe essere più di zero.
Reshetov:
Imposteresti anche la deviazione in negativo?


Grazie, compagni! Esattamente! Ero troppo occupato a lavorare e non ne avevo idea. Avrei voluto cliccare semplicemente il pulsante di ringraziamento, per non moltiplicare. )

A proposito, sarebbe utile raccomandare ai neofiti di passare parametri agli indicatori tramite variabili con nomi eloquenti. Finora l'ho fatto, questa volta mi è sfuggito qualcosa.

 

Buona sera a tutti!

Volevo fare la stessa domanda e ho preso la funzione da qui https://www.mql5.com/ru/forum/131859

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}

Ottengo errori--->

Tutte le variabili della funzione sono definite al suo interno... cosa c'è che non va?

copiato e incollato. --->

   if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
   
   
 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 
DanLett:

Non ci sono errori:

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), CLR_NONE);
          }
        }
      }
    }
  }
}
Ma è sufficiente specificare un colore, per esempio -CLR_NONE.
 

E sembra che tu abbia questo 'appeso in aria':

  if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
In realtà, una tale condizione (High[2]==High[1 ]) o tale(Close[2]==High[1 ]) o tale(High[2]==Open[1 ]) è rara. Guarda il grafico, quante di queste coincidenze troverai?

Per quanto riguarda la logica della rimozione dell'ordine, ... - soffre anche, in breve.

 

copiato il codice da qui e creato un nuovo progetto (EA) incollato il codice -> compilato

Stranamente, dà ancora gli stessi errori...

 
DanLett:

copiato il codice da qui e creato un nuovo progetto (EA) incollato il codice -> compilato

Stranamente, dà ancora gli stessi errori...

Provate a rimuovere tutto tranne questa funzione e compilate. Ci saranno degli errori? Basta salvarlo prima di cancellarlo.