[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 582

 
Azerus:

L'ultima funzione pubblicata da Kim, GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107), tiene conto solo degli ordini aperti:

Ho provato ad ampliarlo un po' includendovi gli ordini pendenti (aggiungendo semplicemente altri tipi): ma gli ordini pendenti non vengono presi in considerazione. Sono contati in modo diverso? La documentazione non dice nulla di questo....


Gli ordini pendenti non hanno una "perdita potenziale totale delle posizioni aperte nella valuta di deposito".

La funzione GetPotentialLossInCurrency() restituisce la perdita potenziale totale delle posizioni aperte nella valuta di deposito.

Si riferisce alle posizioni sul mercato. Premere F1 su queste funzioni di mercato, rileggere attentamente le informazioni:

tv=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
              if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
              if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
              pl+=OrderCommission()+OrderSwap();
 
Roman.:


Gliordini pendenti non hanno "perdita potenziale totale delle posizioni aperte nella valuta di deposito".

La funzione GetPotentialLossInCurrency() restituisce la perdita potenziale totale delle posizioni aperte nella valuta di deposito.

Stiamo parlando di posizioni nel mercato. Premere F1 su queste funzioni di mercato, rileggere attentamente le informazioni:

 

Domanda ai programmatori:
su una nuova barra, l'Expert Advisor controlla se l'ordine su euro è vivo (per esempio), se no - fa una nuova operazione, se sì - lascia tutto com'è.
mettere una tale condizione:

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         int Tip=OrderType();                   // Тип ордера
         if(OrderSymbol()!="EURUSD"||Tip>1){continue;}else{// Не наш ордер

      
   RefreshRates();
  double point5 =MarketInfo("EURUSD", MODE_POINT);//Запрос Point
 double bid5 =MarketInfo("EURUSD", MODE_BID); // Запрос значения Bid
 double ask5 =MarketInfo("EURUSD", MODE_ASK); // Запрос значения Ask
  double SL5 = NormalizeDouble(bid5+(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5 = NormalizeDouble(bid5-(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS)); 
  double SL5v = NormalizeDouble(bid5-(Stop*point5), MarketInfo("EURUSD", MODE_DIGITS));
 double TP5v = NormalizeDouble(bid5+(Profit*point5), MarketInfo("EURUSD", MODE_DIGITS));  
 if ((iVolume("EURUSD",Period(),4)) > (iVolume("EURUSD",Period(),1))) { 
 ticket=OrderSend("EURUSD",OP_SELL,lot_EUR,bid5,Slip,0,0);// Открытие Sell
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5,TP5 ,0,CLR_NONE); 
 {Alert (GetLastError());} // Сообщение об ошибке
}else{ticket=OrderSend("EURUSD",OP_BUY,lot_EUR,ask5,Slip,0,0); // Открытие BUY
 OrderSelect(ticket,SELECT_BY_TICKET);
 OrderModify(OrderTicket(),OrderOpenPrice(),SL5v,TP5v ,0,CLR_NONE); 
 { Alert (GetLastError());} // Сообщение об ошибке
}}

        }                                       // Конец анализа орд.
     }                                          // Конец перебора орд.

Ma il codice non funziona. Dov'è l'errore?

 
Cruc:

Ecco una domanda per i programmatori:
su una nuova barra, l'Expert Advisor controlla se l'ordine EUR è vivo (per esempio, se non lo è, apre una nuova operazione, se lo è, lascia tutto com'è.
Ho posto una tale condizione:

Ma il codice non funziona. Dov'è l'errore?

Guarda cosa succede se ci sono una dozzina di ordini e il tuo è il settimo (per esempio)

Controlla il primo - non è il nostro.

Controlla il secondo, non è il nostro.

...

controllare il settimo - il nostro

controllare l'ottavo, non è nostro.

...

 


L'idea è che quando apri un gruppo di ordini su una coppia, puoi chiudere tutti gli ordini sovrapposti in una sola mossa.

Modifica/elimina ordine--->tipo---->Chiudi ordini sovrapposti

Cancella gli ordini sovrapposti... Esiste una tale funzione in MQL?

Ops, trovato:https://forum.mql4.com/ru/4822

 
ilunga:

vedere cosa succede se ci sono una dozzina di ordini e il tuo è il settimo (per esempio)

controlla il primo - non è il nostro.

Controlla il secondo, non è il nostro.

...

controllare il settimo - il nostro

controllare l'ottavo, non è il nostro, impostare l'ordine

...


C'è solo un ordine aperto su questa coppia. Controllo solo il simbolo EURUSD dato, ma non devo aver impostato correttamente la condizione

if(OrderSymbol()!="EURUSD"||Tip>1){continua;}else{

abbiamo bisogno di if(OrderSymbol()= Symbol("EURUSD"){

 
Cruc:


C'è solo un ordine aperto per questa coppia. Sto controllando solo per il simbolo EURUSD dato, ma devo aver impostato male la condizione

if(OrderSymbol()!="EURUSD"||Tip>1){continua;}else{

se(OrderSymbol()= Symbol("EURUSD"){

Se avete solo 1 simbolo in un Expert Advisor, potete semplicemente ricordare il suo ticket e controllarlo ogni volta, senza passare attraverso tutti gli ordini
 
ilunga:
se avete solo 1 nel vostro EA, potete semplicemente ricordare il suo ticket e controllare ogni volta che è chiuso o meno, senza passare attraverso tutti gli ordini

Grazie mille per la raccomandazione, l'ho quasi capito, solo non ricordo se l'ordine è attivato, poi il biglietto prende il valore -10?
 
Roman.:


Gli ordini pendenti non hanno "perdita potenziale totale delle posizioni aperte nella valuta di deposito".

La funzione GetPotentialLossInCurrency() restituisce la perdita potenziale totale delle posizioni aperte nella valuta di deposito.

Si riferisce alle posizioni sul mercato. Premere F1 su queste funzioni di mercato, rileggere attentamente le informazioni:


Capisco molto bene che la funzione GetPotentialLossInCurrency() parla di posizioni aperte. Ho una domanda: perché non si possono contabilizzare anche gli ordini in sospeso?

La documentazione:

double OrderOpenPrice(  )

 Возвращает цену открытия для выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

double OrderStopLoss(   )

 Возвращает значение цены закрытия позиции при достижении уровня убыточности (stop loss) для текущего выбранного ордера.
 Ордер должен быть предварительно выбран с помощью функции OrderSelect().

Non c'è scritto da nessuna parte che OrderOpenPrice e/o OrderStopLoss si applicano solo agli ordini aperti.

 
Cruc:

Grazie mille per la raccomandazione, l'ho quasi capito, solo non riesco a ricordare se l'ordine viene attivato, il biglietto prende un valore di -10?
Il biglietto rimane com'era
Motivazione: