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

 
TarasBY:

Non ho lavorato con questa funzione. Il presupposto è che se il terminale seleziona un carattere una volta, il prossimo tentativo di selezionare lo stesso carattere può restituire falso. Cercate di ignorare il controllo di ritorno di questa funzione.

Si scopre che SymbolSelect("AUDUSD", true) restituisce true solo se AUDUSD non è in MarketWatch - cioè, quando la coppia viene aggiunta a MarketWatch. Una volta che la coppia è in MarketWatch, le chiamate successive restituiscono false.

Questo comportamento non corrisponde affatto al manuale di questa funzione.

Ho dovuto usare una funzione auto-scritta che analizza tutti iSymbolName(i, true) per i=0...SymbolsTotal(true).

 
Mr.Profit:

Risulta che SymbolSelect("AUDUSD", true) restituisce true solo se AUDUSD non è in MarketWatch - cioè quando la coppia viene aggiunta a MarketWatch. Una volta che la coppia è in MarketWatch, le chiamate successive restituiscono false.

Questo comportamento non corrisponde affatto al manuale di questa funzione.

Qualcosa mi suggerisce che possiamo fare a meno di SymbolSelect().
 
TarasBY:
Qualcosa mi dice che si può fare a meno di SymbolSelect().

Sì, ho appena aggiornato il mio post sopra
 
borilunad:

Qual è l'altro, o dobbiamo già fare un passo avanti su questo?!


Master Forex

 
laveosa:
mi ci sono voluti 4 mesi per fare un gufo su alpari..... nano quanto il codice è molto fottutamente lungo e non piccolo..... e ora tutto è !!!!! è un peccato .... Non sono sicuro di cosa farne.

Terzo gufo e ancora lo stesso errore, felice che il problema non sia nel codice :)
 
Ecco il fatto, ho messo un nuovo "No" (è un cavo di fibra di vetro ad alta velocità con una velocità di download di 7mb al secondo.) e dopo ho avuto la stessa cosa con Alpari, ma con Master Forex tutto è OK e anche Admeral ......... ecco un'altra sfumatura, il broker è installato sul drive D:) quando reinstallo il sistema operativo non ne ho installato uno nuovo e uso quello vecchio .... forse dovrei installarlo?
 
laveosa:


Master Forex


Grazie, darò un'occhiata!
 
borilunad:

Grazie, darò un'occhiata!

Non sto facendo campagna, sto solo rispondendo a una domanda :)
 

Ciao a tutti. Ho iniziato a scrivere EAs non molto tempo fa. Ho affrontato un problema apparentemente elementare, che non riesco a risolvere, per favore aiutatemi.

Il problema. Su un nuovo tick perdo il valore di una variabile.

Breve descrizione. Assegnate ad una variabile il valore di ritorno della funzione OrderSend() e uscite usando il comando return. Al prossimo tick il valore della variabile diventa uguale a zero.

L'elemento chiave del codice sorgente. Il codice sorgente completo qui sotto.

se (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alert ("Assegnato valore alla variabile ticket_sell", ticket_sell);
ritorno;
}
}

Alert ("Exist position = ", position_exists, "Buy order ", ticket_buy, "Sell order ", ticket_sell);

Risultato.

La schermata mostra che la posizione è stata aperta con successo e il biglietto d'ordine è stato memorizzato nella variabile ticket_sell. Tuttavia, la variabile ticket_sell diventa zero al prossimo tick. E non posso modificare/cancellare l'ordine sul biglietto.

// Простой параболик. Переворотная стратегия.
// В условиях, когда в терминале уже есть открытые позиции по другим инструментам.

input double TakeProfit    =2500;
input double StopLoss      =400;
input double Lots          =1;
input double TrailingStop  =100;

input double Parameter1    =0.02; // Параметры индикатора PSAR
input double Parameter2    =0.2;
   
void OnTick()
{
int position_exists; // Переменная, принимающая значения 0 или 1. Указывает, открыта ли позиция по интструменту EURUSD

// Занесение в переменные значений индикатора на последнем и предпоследнем закрывшихся барах  
double SAR_Prev=iSAR(NULL,0,Parameter1,Parameter2,1);
double SAR_Prev2=iSAR(NULL,0,Parameter1,Parameter2,2);
// Занесение в переменные цен закрытия на последнем и предпоследнем барах
double LastClose=iClose(NULL,0,1);
double LastClose2=iClose(NULL,0,2);

  
//---------------------------------------------------------------------     
// Блок, который определяет, открыта ли позиция по инструменту EURUSD
// путём перебора всех открытых ордеров терминала в цикле. 
// Если позиция открыта, то переменной position_exists будет присвоено значение 1
int cnt;
string sym;
int type;

int total=OrdersTotal();
position_exists=0;
for (cnt=0; cnt<=total-1; cnt++)
   {
    bool select=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    sym=OrderSymbol();
    type=OrderType();
    if (sym=="EURUSD" && (type==1 || type==0)) 
      {
       position_exists=1;
       break;
      }
   }     
//--------------------------------------------------------------------- 
// Если позиция по EURUSD не существует, то проверяем условия открытия сделки  
   if(position_exists==0)
      {
       if (SAR_Prev<LastClose && SAR_Prev2>LastClose2)
         {
          int ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point," ",111,0,Blue);
          Alert ("Присвоили значение пременной ticket_buy ", ticket_buy);
          return;
         }
         
       if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
         {
          int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point," ",111,0,Red);
          Alert ("Присвоили значение пременной ticket_sell ", ticket_sell);
          return;
         }
      }
      
   Alert ("Существование позиции = ", position_exists, " Ордер на покупку ", ticket_buy, " Ордер на продажу ", ticket_sell);
//--------------------------------------------------------------------- 
// Если позиция по EURUSD существует, то проверяем условия закрытия позиции  
   if (position_exists==1)
      {
       if (ticket_sell==0) // Если открытой позиции на продажу нет, то выбираем открытый ордер на покупку по тикету
         {bool select_buy=OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES);}
         
       if (ticket_buy==0) // Если открытой позиции на покупку нет, то выбираем открытый ордер на продажу по тикету
         {bool select_sell=OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES);}
         
       
       if(OrderType()==OP_BUY) 
         {
          if(SAR_Prev>LastClose && SAR_Prev2<LastClose2) // Проверяем уловия для закрытия длинной позиции
              {
               bool close_buy=OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
               return;
              }
         }
        
        
        if(OrderType()==OP_SELL)
         {
          if(SAR_Prev<LastClose && SAR_Prev2>LastClose2) // Проверяем уловия для закрытия короткой позиции
              {
               bool close_sell=OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet);
               return;
              }
          } 
       }
} 

 
Sergey71:

Ciao a tutti. Ho iniziato a scrivere EAs non molto tempo fa. Ho affrontato un problema apparentemente elementare, che non riesco a risolvere, per favore aiutatemi.

Il problema. Su un nuovo tick perdo il valore di una variabile.

Breve descrizione. Assegnate ad una variabile il valore di ritorno della funzione OrderSend() e uscite usando il comando return. Al prossimo tick il valore della variabile diventa uguale a zero.

L'elemento chiave del codice sorgente. Il codice sorgente completo qui sotto.

se (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alert ("Assegnato valore alla variabile ticket_sell", ticket_sell);
ritorno;
}
}

Alert ("Exist position = ", position_exists, "Buy order ", ticket_buy, "Sell order ", ticket_sell);

Risultato.

La schermata mostra che la posizione è stata aperta con successo e il biglietto d'ordine è stato memorizzato nella variabile ticket_sell. Tuttavia, la variabile ticket_sell diventa zero al prossimo tick. E non posso modificare/cancellare l'ordine sul biglietto.


Per evitare di perdere valore, abbiamo bisogno di una variabile globale, mettere la sua dichiarazione fuori daOnTick() o renderla statica