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

 

E naturalmente quando apriamo il prossimo acquisto, facciamo immediatamente un roll over(StopLoss uguale al nostro prezzo medio + 50 pips) su tutte le posizioni .

Questa è la canaglia che a volte non prende l'ultima posizione. Avevamo 3 posizioni, ma 4 di esse si sono aperte. Ho dimenticato di mettere StopLoss nella quarta posizione.

DedZone dovrebbe essere tenuto:

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Il calcolo della DedZone si trova nell'inizializzazione dell'Expert Advisor.

 
Limita:

E naturalmente quando apriamo il prossimo acquisto, facciamo immediatamente un roll over(StopLoss uguale al nostro prezzo medio + 50 pips) su tutte le posizioni .

Questa è la canaglia che a volte non prende l'ultima posizione. Avevamo 3 posizioni, ma 4 di esse si sono aperte. Ho dimenticato di mettere StopLoss nella quarta posizione.

DedZone dovrebbe essere tenuto:

DedZone è nell'inizializzazione dell'Expert Advisor.

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Quando entrambi sono uguali a zero, cosa succede? Alpari usa lo spread*2 in questo caso.

E non hai risposto alla mia domanda sulla logica di queste linee.

 
ALXIMIKS:

è meglio fare così (qualcuno ha scritto che ha avuto problemi con il tuo modo di fare quando si modificano o si cancellano gli ordini):

E perché olio e burro? (lasciare qualcosa in pace).


Grazie!

Sembra essere d'accordo con l'esperto :))

 
artmedia70:

E non hai risposto alla mia domanda sulla logica di quelle linee.


artmedia70:

L'intera logica del comportamento di un EA può essere divisa in blocchi logici che, a seconda delle condizioni, vengono eseguiti o meno.

Per i vostri scopi, potete vedere che questo blocco può essere un numero di stringhe racchiuse tra parentesi graffe:

If (condition) {se la condizione è vera, il blocco racchiuso in queste parentesi graffe viene eseguito}

Altrimenti {se la condizione di cui sopra non è vera, viene eseguito il blocco racchiuso in quelle parentesi graffe}

Se non ci sono parentesi graffe dopo la condizione, il blocco eseguito quando la condizione è vera è una singola linea immediatamente dopo la condizione:

Se (condizione) Questa linea viene eseguita

Altrimenti questa linea viene eseguita.

Nei miei esempi If è if e Otherwise è else.

Preso qui

 
artmedia70:

E quando entrambi sono zero, allora cosa? Alpari usa lo spread*2 in questo caso.

E non hai risposto alla mia domanda sulla logica di queste stringhe.



Grazie per le informazioni su Alpari.

Per quanto riguarda la logica di linea, ha risposto ALXIMIKS.

Dovrei aggiungere per me stesso che la modifica dovrebbe essere fatta solo se tutte le condizioni sono vere. Se almeno uno di loro fallisce, si va avanti.

 
Limita:


Grazie per le informazioni su Alpari.

Per quanto riguarda String Logic, ALXIMIKS ha risposto.

Dovrei aggiungere che in questo caso la modifica dovrebbe avvenire solo se tutte le condizioni sono vere. Se almeno uno di loro fallisce, andiamo avanti.

Mi ha mostrato per qualche motivo le mie stesse parole scritte una volta a qualcuno.

Volevo avere una risposta alla mia domanda sulla logica. Tutti gli if () in quel blocco di codice vanno uno dopo l'altro. Significa che se la prima condizione è vera, anche la seconda sarà vera, se la seconda è vera, la terza sarà vera e così via, ma... Se la prima condizione non è vera, la seconda non sarà eseguita, ma la terza sarà controllata di nuovo.

Forse è così che dovrebbe essere, dopo tutto:

bool ProfitManagement() {
   double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
   double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
   double StopLossSell = SellAP-Profit*Point;
   double TakeProfitSell = SellAP - Profit*Point;
   RefreshRates();
   for(int good = 0; good < OrdersTotal(); good ++) {
      if(OrderSelect (good, SELECT_BY_POS)) {            
         if (OrderMagicNumber()!=MagicNumber)   continue;
         if (OrderSymbol()!=Symbol())           continue;
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_BUY) {                             
            if (BuyAP < Bid) { 
               if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick) { // Профит не равен нужному
                  if (Bid-StopLossBuy>DedZone) {                     // Уровень достаточно удален от цены
                     if (WaitForTradeContext()) {                    // Свободен ли торговый поток?
                        if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
                           Alert (Symbol()," Хрень со стопами! ",   GetLastError());
                           return(false);
                           }
                        }
                     }
                  }
               }
            }
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_SELL) {                             
            // вся та же хрень...
            }
//-------------------------Order Buy-----------------------------------------------------  
         }
      }
   return(true);
}

Questa è solo la mia ipotesi, dato che non ho assolutamente idea della logica che hai in mente e non so cosa fanno e contengono/restituiscono alcune variabili e funzioni.

 
artmedia70:

1) Mi ha mostrato per qualche motivo le mie stesse parole scritte una volta a qualcuno.

2) Questo è quello che volevo che dicessi sulla logica. Avete tutti gli if () in quel blocco di codice che vanno uno dopo l'altro. Il che significa che se la prima condizione è vera, anche la seconda condizione sarà vera, se la seconda condizione è vera, anche la terza condizione sarà vera, ecc. Se la prima condizione non è vera, la seconda non sarà eseguita, ma la terza sarà controllata di nuovo.

1) beh questo era per tutti, non solo per te.

2) hai già fatto una volta questa affermazione, qualche giorno fa, solo che da parte mia ho dimenticato di ricontrollare questa informazione allora.

Ora ho fatto un semplice script:

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

E si è scoperto che avevi torto: NO ALERT !!!

 
ALXIMIKS:

1) beh questo era per tutti, non solo per te.

2) Hai già fatto questa affermazione una volta, qualche giorno fa, ma ho dimenticato di ricontrollare le informazioni all'epoca.

Ora ho fatto un semplice script:

E si è scoperto che avevi torto: NO ALERT !!!

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Beh, sono d'accordo. In questo caso, sono stato un po' precipitoso quando ho scritto prima su cosa e come le condizioni annidate sarebbero state applicate senza parentesi graffe. Lei ha ragione in questa situazione. Sapete perché?

Provate a far eseguire else nel vostro codice.

 
artmedia70:

Beh, sono d'accordo. In questo caso, sono stato un po' precipitoso quando ho scritto prima su cosa e come le condizioni annidate sarebbero state applicate senza parentesi graffe. Lei ha ragione in questa situazione. Sapete perché?

Provate a far eseguire else nel vostro codice.


int start(){
 int a=0;
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

Nessun allarme da questo script. Else si riferisce alla condizione " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Ringraziamenti:

int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (3>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

avere anAlert: "a=0".

Risultato - la gestione del fallimento delle condizioni è possibile solo per l'ultima condizione quando le parentesi graffe "{" non sono usate durante l'enumerazione di una certa serie di condizioni.

 
ALXIMIKS:

nessun allarme da questo script. Else si riferisce alla condizione " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Ringraziamenti:

avere anAlert: "a=0".

Il risultato è che la gestione delle non condizioni è possibile solo per l'ultima condizione, quando le parentesi graffe "{" non sono usate durante l'enumerazione di una certa serie di condizioni.


Cioè le parentesi sono necessarie per organizzare i rami logici. Senza di loro, la prima condizione è primaria. Se non è vero, le altre condizioni non saranno eseguite.

Cercate di risolvere il problema:

 if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

E dopo questo, capire a cos'altro si riferisce:

if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
else if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");