[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 466

 
Cmu4:

No... ho fatto come hai suggerito tu - rimane la stessa cosa.

Inoltre, ho cambiato il codice, dividendo separatamente in blocchi di apertura e chiusura per condizioni. È tutto uguale. Non so cosa fare adesso.

Ecco uno screenshot del tester, EA per il tester è nel trailer:


Si potrebbe fare così, con un controllo di posizione aperto
File:
 
Vinin:

Potrebbe essere qualcosa del genere, con il controllo delle posizioni aperte.


Pensato anche in questa direzione. Ma mi interessa l'errore in sé. Dove si trova?

p.s. Grazie per aver aggiunto il codice! Quando viene pompato, si lamenta di un order_type non definito, nella funzione Closeall.

 
Cmu4:


Pensato anche in questa direzione. Ma mi interessa l'errore in sé. Dove si trova?

p.s. Grazie per aver aggiunto il codice! Quando viene pompato giura su un order_type non definito, nella funzione Closeall.


void Closeall(int OP=-1)
{
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if(OrderSymbol()==Symbol())
         { 
            if (OrderType()==OP || OP=-1) 
            {
               if(OrderType()==OP_BUY)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               else if(OrderType()==OP_SELL)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
            }
         } 
      }
   }
}
 
Cmu4:

No... ho fatto come hai suggerito tu - rimane la stessa cosa.

Inoltre, ho cambiato il codice, dividendo separatamente in blocchi di apertura e chiusura per condizioni. È tutto uguale. Non so cosa fare adesso.

Ecco uno screenshot di un tester, l'Expert Advisor è nel trailer:

Ho bisogno di sapere: le posizioni sono aperte in fila come questa? Compra, Vendi, Compra, Vendi, ecc. o consecutivi, per esempio Compra.

Credo che tu abbia posizioni di acquisto e vendita che si aprono in successione.

Il motivo: i MACD confrontati sono molto vicini e cambiano posto (più grande è più piccolo) rapidamente. Pertanto, una condizione è soddisfatta prima e poi l'altra.

Soluzione:

if (MA1-MA2 > 0.0001 &&  MA2-MA3 > 0.0001 && Napr==1) //или другая константа
 
extralifes:

no attraverso se non funziona.

Dovrebbe essere, purché la condizione (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 sia corretta, di aprire solo un ordine di vendita a condizione che iRSI(NULL,0,rsi_periodo,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_periodo,PRICE_CLOSE,0<0.7)

È lo stesso al contrario.

Può essere fatto attraverso while o bool? Sono in piena crisi di programmazione. Capisco la catena logica, ma le mie mani sono lente ad eseguirla in codice.


Quindi non è questo il problema... tutto dovrebbe funzionare se... Funziona così - finché (il tuo stesso while) la condizione (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 - è soddisfatta e RSI(NULL,0,rsi_periodo,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7), allora apriamo solo il profitto...

Non avete bisogno di nessun bool qui - perché dovreste trattare con le bandiere, quando è tutto chiaro che quando tutte queste condizioni sono soddisfatte, apriamo ordini di acquisto o di vendita?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }

Guarda attentamente ancora una volta.

Cercate l'errore da qualche altra parte nel codice. Tu scrivi "non funziona con if" - spiegalo in modo più dettagliato - cosa dice nel "log"?

 
ikatsko:

Ciao, non voglio (e a volte lo faccio) colpire uno StopOut. Ho deciso di limitare il lotto a un valore che non avrebbe "catturato" StopOut nelle peggiori condizioni. Andando per tentativi ed errori per molto tempo. Forse qualcuno ha una soluzione?

Dati iniziali:

- Coppia di valute - non necessariamente EURUSD

- prezzo (prezzo di acquisto/vendita)

- uno StopLoss specificato in punti (si presume che lo scenario peggiore sia quello di non prendere uno StopOut anche se il livello di StopLoss viene raggiunto)

- valore del lotto specificato

- Gli altri valori devono essere compilati utilizzando le funzioni MT4: Dimensione 1 lotto, leva, tasso di incrocio.

Preferibilmente un codice.

In teoria, capisco cosa è necessario: saldo meno la possibile perdita al livello StopLoss diviso per il margine. E questo valore dovrebbe essere più grande dello StopOut (in termini percentuali).

Qualcosa del genere

int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
if (AccountStopoutMode==0)
  {
   double Marga = NormalizeDouble(MarketInfo("EURUSD", MODE_MARGINREQUIRED), 2);
   double TickValue = NormalizeDouble(MarketInfo("EURUSD", MODE_TICKVALUE), 2);
   int SL = 26;////Пунктов
   double lotsShortNaVSE = NormalizeDouble(AccountBalance() / (level * Marga / 100.0 + SL * TickValue ), 2);
  }

Il numero di lotti non deve essere superiore al numero di lottiShortNaVSE

SL ---- è una possibile perdita sulla tua posizione aperta.

E le società di brokeraggio hanno la loro percezione delle possibili perdite.

Ecco perché dobbiamo prendere il numero massimo dal vostro o dalla società di intermediazione. Per esempio, al momento il Dealer Center per la coppia EURUSD ha una possibile perdita SL = 26.

SL = MathMax(VashSLvPunktah, SLvPunktahUVashegoDillinga);
Ci sono altre opzioni?
 
rlx:


E anche le società di intermediazione hanno la loro visione della possibile perdita.

Ecco perché dovreste prendere il numero massimo di perdite vostre o della vostra società di intermediazione. Per esempio, al momento la società di brokeraggio ha una possibile perdita SL = 26 per EURUSD.

Forse ci sono altre varianti?


Questo è solo il modo di calcolare questa visione della DC.

Ma questo è più critico per i commercianti a breve termine.

 

Cioè per esempio se avete uno stopLoss di 5 punti, allora naturalmente il numero di lotti aperti sarà calcolato molto.

Ma aprire una tale posizione non funzionerà, perché le società di brokeraggio hanno il loro sistema di gestione del rischio.

 
rlx:


L'unica cosa è come calcolare questa vista del DC.

Ma questo è più critico per chi lavora a breve termine.


Buona giornata! Per favore, aiutatemi. Ho bisogno di uno script che imposti automaticamente stop e profitto durante il trading manuale. Pensi che sia possibile e se esiste, per favore dammi un link.
 
Cmu4:

No... ho fatto come hai suggerito tu - rimane la stessa cosa.

Inoltre, ho cambiato il codice, dividendo separatamente in blocchi di apertura e chiusura per condizioni. È tutto uguale. Non so cosa fare adesso.

Ecco uno screenshot del tester, EA per il tester è nel trailer:

Finché la condizione MAKDak è soddisfatta, gli ordini si apriranno anche in lotti su ogni tick.

Aggiungere alle condizioni
Per le posizioni di acquisto: se non c'è un ordine di acquisto sul mercato, allora aprilo...
Per le posizioni di vendita: se non c'è un ordine di vendita a mercato, aprilo...

E il problema sarà risolto.