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

 
VoDyaMon:

Se si scrive un semplice script che crea un oggetto di tipo OBJ_ARROW_RIGHT_PRICE e poi lo elimina, l'oggetto non viene cancellato. Inoltre, il comando ObjectType scopre improvvisamente che l'oggetto creato non è di tipo OBJ_ARROW_RIGHT_PRICE (==36), ma ==22 cioè una semplice "freccia su" !!! Sono l'unico che ce l'ha o ce l'hanno tutti?

C'erano già opinioni di "esperti" su questo problema: come leggere la guida, o non abbastanza memoria :) .

La memoria è sufficiente.

Sembra che il comando ObjectCreate disegni un oggetto del tipo OBJ_ARROW_RIGHT_PRICE , che non può essere rimosso dal comando ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE), ma può essere rimosso dal comando ObjectsDeleteAll(0,22), come se avessimo non il cartellino del prezzo giusto ma una "freccia in su". Di chi è la colpa?

... ... ...

Per cancellare un oggetto di tipo OBJ_ARROW_RIGHT_PRICE usate il comando ObjectsDeleteAll(0,OBJ_ARROW), con indicazione obbligatoria della sottofinestra.

p.s. Un oggetto di tipo OBJ_ARROW è "freccia" qualsiasi, non solo "freccia su". ObjectCreate(...OBJ_ARROW...) crea immediatamente una "freccia in alto". Come mai non è nella guida?

Scrivi in questo thread. Almeno gli sviluppatori ci sono.
 

C'è un copione:

#property show_confirm;
int slip=5;

void start()
{
  for(int i=OrdersTotal()-1;i<=0;i--)
  {
   int p=0; double price=0;
      if(OrderSelect(i,SELECT_BY_POS))
     {
       switch(OrderType())
        {
         case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
         case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
         default: break;
        }
         while(p<5)                              
           {                                    
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==true) 
               break;                   
            else                              
              {
               p++;                              
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(1000);                       
              }
           }
     }
 }
}

Che non tenta nemmeno di chiudere un solo ordine di mercato attualmente aperto. Perché?

Non scrive nessun errore nel log:

2014.03.10 04:39:11.093 Script closeallmarket AUDUSD,M30: removed<br / translate="no"> 2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: uninit reason 0
2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: inizializzato
2014.03.10 04:39:10.109 Script closeallmarket AUDUSD,M30: caricato con successo
 

Sostituire

 for(int i=OrdersTotal()-1;i<=0;i--)

a

 for(int i=OrdersTotal()-1;i>=0;i--)
 

Ciao Mr. professionisti.Non rifiutare un nuovo arrivato alla programmazione, guarda il codice, per vedere se è scritto correttamente. Chi non è troppo pigro per occuparsene. Non posso testarlo nello Strategy Tester perché è multivaluta. File con il codice e gli indicatori allegati all'archivio.



 

Pomeriggio.

Non posso fare un codice analogo da php a mql4:

$massiv = array(
            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877            
            );
                        
            asort($massiv);
            $i=0;
            foreach ($massiv as $key => $val){$i++;$massiv[$key]=$i;}
            
            $a="";
            ksort($massiv);
            foreach ($massiv as $key => $val){$a=$a.$val.".";}  

Cioè da un array.

            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877 

Necessità di ottenere un array

            "1" => 1,
            "2" => 3,
            "3" => 2,
            "4" => 4,
            "5" => 7,
            "6" => 5,
            "7" => 6,
            "8" => 8 

Bisogno di aiuto.

 
Roger:

Sostituire

a


Ohhhh... Amico, questa è un'altra volta, grazie ))))
 

Sto cercando di scrivere un semplice EA che chiuda tutte le posizioni sul mio conto quando raggiunge i valori di profitto o perdita specificati nella valuta di deposito (ho aperto da diversi simboli), ma chiude le posizioni non appena appaiono (((

Non capisco cosa c'è che non va:

input double tp_c = 80.0;
input double sl_c = 120.0;

input int slip=5;

 double profit_c = 0.0;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }
 
denis77515:

Ciao Mr. professionisti.Non rifiutare un nuovo arrivato alla programmazione, guarda il codice, per vedere se è scritto correttamente. Chi non è troppo pigro per occuparsene. Non posso testarlo nello Strategy Tester perché è multivaluta. Ho allegato un file con il codice e gli indicatori all'archivio.



Sono molto interessato a come un principiante sia così determinato a fare trading con un tale Expert Advisor e a scrivere un sistema di trading che ne vale la pena. Non mi dispiace per il deposito?


Il codice mostra un sacco di errori senza entrare nell'algoritmo di trading, nessun tentativo di ottimizzarlo.

Si prega di trovare la differenza tra le vostre funzioni CountBuy_JPY() CountSell_JPY() CountBuy_GBP() Nell'output di ognuna di esse si ottiene lo stesso risultato, in Buy tutte le posizioni Buy aperte, in altre tutte quelle Sal. Prova a scrivere tutte queste funzioni in una e ottieni due array collegati con i simboli e il numero di ordini in esso.

Sei lontano dal Tester quanto la luna. Dovresti scrivere degli script per ogni funzione e guardare cosa ottieni, poi eseguire il debugger e guardare tutte le variabili. Questo è l'unico modo per andare avanti gradualmente

 
evillive:

Sto cercando di scrivere un semplice EA che chiuda tutte le posizioni sul mio conto quando raggiunge i valori di profitto o perdita specificati nella valuta di deposito (aperta da diversi simboli), ma chiude le posizioni non appena appaiono (((

Non capisco cosa c'è che non va:


Analizzare la condizione ... E il consiglio è lo stesso, usate gli script di stampa, e commentate le operazioni commerciali per ora e debuggate
if(profit_c > tp_c || profit_c < sl_c) closeall();   profit_c > 80 ИЛИ  profit_c < 120   
 
evillive:

Sto cercando di scrivere un semplice EA che chiuda tutte le posizioni sul mio conto quando raggiunge i valori di profitto o perdita specificati nella valuta di deposito (ho aperto da diversi simboli), ma chiude le posizioni non appena appaiono (((

Non capisco cosa c'è che non va:



input double tp_c = 80.0;
input double sl_c = - 120.0; //// minus 120

input int slip=5;

 double profit_c ;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   profit_c = 0.0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }
Motivazione: