[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 125

 
hoz:



Quindi ho un assegno per questo caso:

Se stop - nuovo stop (in b.u.) non è uguale a zero... poi modifichiamo... In caso contrario, non modifichiamo. Ecco perché non mi è chiaro come questo accada. Dopotutto, capisco che devo controllare l'uguaglianza tra la fermata passata e quella nuova e l'ho fatto.

Ecco un'occhiata a come controllo dall'alto e dal basso quando pesco senza errori un bai:

          if(OrderStopLoss() > OrderOpenPrice())
          {
            if(NormalizeDouble(Bid-OrderStopLoss()-plus*tral,Digits) > prev)
            if(Bid > NormalizeDouble(OrderStopLoss()+plus*tral+prev,Digits))
            {
              SL = NormalizeDouble(OrderStopLoss()+plus*part*tral,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue);return(0);
          } }

Posso dare la funzione ModifyOrder(), buona per tutte le modifiche di ordine e posizione.

 
Vinin:

Modifica questo codice in modo che non sembri che sia stato violato.
Non capisco.
Come si fa a modificarlo? Cosa intendi?
 
borilunad:
Consiglierei di modificarlo non per barre, ma per tanti pip. Se necessario, è a questo che servono le risorse. E l'errore "nessun errore" appare quando si ripete il prezzo per una modifica che esiste già. Quindi, devi andare passo dopo passo come ti ho consigliato all'inizio.


Il B.U. è ovviamente disegnato da pip. Intendevo chiamare la funzione B.U. ad ogni tick o all'apertura della barra per esempio... Ma sarebbe sciocco. Il prezzo può saltare molto per bar. Quindi la chiamata sarà simile a quella di tickwise, giusto? Stavo solo pensando che forse si dovrebbe aggiungere una condizione, così non sarà chiamato ad ogni tick. Penso che dovremmo confrontare l'attuale STOP e quello che sarà impostato, più o meno...

In generale. Che cosa strana da fare.

Ho aggiunto una condizione per iniziare e ha funzionato così:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }

Ora non ci sono errori.

Quello che non capisco è che la stessa funzione MovingStopLossToBU() cambia solo se lo stop non è uguale a Stop Loss:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
    if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
    {
       Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
    }
Come lo capite allora?
 
Buona sera, potreste dirmi come colorare le candele sopra la media MA(10) in verde e sotto in rosso?
 
hoz:


Il B.U. è ovviamente disegnato da pip. Intendevo chiamare la funzione B.U. ad ogni tick o all'apertura della barra per esempio... Ma sarebbe sciocco. Il prezzo può saltare molto per bar. Quindi la chiamata sarà simile a quella di tickwise, giusto? Stavo solo pensando che forse dovrebbe essere aggiunta qualche condizione, in modo che non venga chiamata ad ogni tick. Penso che dovremmo confrontare l'attuale STOP e quello che sarà impostato, più o meno...

In generale. Che cosa strana da fare.

Ho aggiunto una condizione per iniziare e ha funzionato così:

Ora non ci sono errori.

Quello che non capisco è che la stessa funzioneMovingStopLossToBU() cambia solo se lo stop non è uguale a Stop Loss:

Come lo capite allora?

Nel tuo esempio, quando lo stop è zero, significa che hai appena aperto una posizione senza stop. E ti ho dato il caso in cui sei già a pareggio.

Ma guarda sopra, ti ho dato il mio trawl senza breakeven! E posso darvi la funzione.

 
agat8430:
Non capisco.
Come modificarlo? Come capirlo?
Allora sei venuto nel posto sbagliato se non capisci. Studia ciò che non capisci, chiederai. E se non capisci niente, non ne hai bisogno.
 
borilunad:
Vedi sopra, ti ho dato il mio strascico senza errori! E posso darvi la funzione.


Non ho visto la tua risposta quando ho scritto. Ora darò un'occhiata.

Ma in generale, sarei felice di vedere la tua funzione di modifica, forse imparerò qualcosa di nuovo per me stesso.

 
borilunad:

Nel tuo esempio, quando lo stop è zero, significa che hai appena aperto una posizione senza stop. E vi ho dato il caso in cui è già in pareggio.

Vedi sopra, ti ho dato la mia pesca a strascico senza break-even! E posso darvi la funzione.


No, non senza una fermata. Ne ho pubblicato solo un pezzo. Ecco la mia funzione di pareggio:

//+-------------------------------------------------------------------------------------+
//| Перевод в б.у. рыночных ордеров                                                     |
//+-------------------------------------------------------------------------------------+
void MovingStopLossToBU()
{
    double priceBU;
    int type = OrderType();
    for (int i=OrdersTotal() - 1; i>=0; i--)
    {
        if (!OrderSelect(i,SELECT_BY_POS)) continue;
        if (i_magic != -1) if (OrderMagicNumber() != i_magic) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        
        RefreshRates();
        
        if (type == 0)
        {
           double price = Ask;
           int li_cmd = 1;
        }
        else
        {
           price = Bid;
           li_cmd = -1;
        }

           if (li_cmd * (price - OrderOpenPrice()) >= i_triggerForBU * pt)
           {
             priceBU = ND(OrderOpenPrice() + li_cmd * (i_preservedProfit * pt));
             if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
             {

                 if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
                 {
                     Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
                 }
               
                     Comment ("Ордер успешно переведён в безубыток");
                     Print ("Ордер успешно переведён в безубыток");
             }
           }
    }
}

Nella linea si vede chiaramente che se lo stop calcolato è uguale a quello che c'è già, non ci sarà nessuna modifica! Giusto? Quindi l'assegno in origine era? Ma l'errore 1 spuntava costantemente, finché non avevo inserito un'altra condizione nell'inizio prima della funzione di modifica:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }
Ecco perché.... Questo è quello che sto cercando di capire. Penso di aver descritto tutto accuratamente.
 
hoz:
Allora sei venuto nel posto sbagliato se non capisci. Studia ciò che non capisci, chiederai. E se non capisci niente, non ne hai bisogno.


Se non capisci niente, non ti serve. Bene, dimmi come modificare il codice in modo che non sembri violato se capisci tutto. È la mia prima volta sul forum e ho ricevuto una risposta così carina.

"Le persone geniali hanno una risposta geniale".

 
agat8430:


Bene, allora ditemi come modificare il codice che non assomiglierebbe a un hack se capite tutti. Sono venuto nel ramo per i principianti. Sono venuto per la prima volta sul forum e ho avuto una bella risposta.

"Le persone geniali hanno una risposta geniale".

Prima per i nuovi arrivati:

Un navigatore di forum e risposte alle domande più frequenti. Lettura altamente raccomandata!( 1 2 3 4 5 6 ) 51 18.02.2011 FAQ