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

 
hoz:


In realtà, sì. Forse è troppo tardi, ma non capisco. Questo è essenzialmente il profitto in pps. che è la distanza dall'apertura alla chiusura. Perché allora l'espressione è sbagliata?

Perché dobbiamo dividere per punto il risultato di questa espressione
 

Sto diventando un po' pieno di me stesso... :) Il problema:

1. C'è una posizione aperta di 0,1 lotto

2. Il suo valore di TakeProfit è di 50 pip.

3. Calcolo il suo profitto potenziale secondo la formula PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. dal calcolo ottengo il profitto potenziale di $5,00 (0,1*50*1,0).

La posizione va in rosso e a un certo punto si apre un'altra media Buy, ma con 0,2 lotti

1. Calcolo il Breakeven per queste due posizioni. La funzione è stata usata per molto tempo, come richiesto, e non ho nessuna lamentela finora:

//+----------------------------------------------------------------------------+
/*
Расчёт уровня БУ для множества по одному инструменту:
сумма лотов = суммарная позиция (СП)
стоимость тика СП = СТ
профит СП = ПСП
Формула расчёта довольно проста:
КП = ПСП / (СТ * СП)
В которой узнаём количество пипс (КП) до уровня БУ относительно текущей цены (ТЦ) символа.
И подставив КП в формулу БУ = ТЦ - КП * Point получаем уровень цены БУ.
В зависимости от направления СП выбирается прибавлять либо отнимать от ТЦ.
*/
double PriceWL(int op, int m1, int m2, double &ll) {
   double Res, pp, pt, tic, NumPP, Prof=0, SumLot=0.00000001;
   int i;
   
   pt =MarketInfo(sy,MODE_POINT);
   tic=MarketInfo(sy,MODE_TICKVALUE);                          // Стоимость тика СТ
   for (i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()==m1 || OrderMagicNumber()==m2) {
            Prof+=(OrderProfit()+OrderSwap()+OrderCommission());  // Суммарный профит позиций ПСП
            SumLot+=OrderLots();                                  // Суммарный лот позиций    СП
            }
         }
      }
   SumLot=MathAbs(NormalizeLot(SumLot));
   NumPP=MathAbs(Prof/(tic*SumLot));                           // Количество пунктов до уровня бу КП
   if (op==0) Res=Ask+NumPP*pt;
   if (op==1) Res=Bid-NumPP*pt;
   ll=SumLot;
   return(Res);
}
//+----------------------------------------------------------------------------+

2. Perfetto. Avete calcolato il livello di pareggio, ma... se ci mettete i gettoni di queste due posizioni, si chiuderanno a zero. Ok, credo. Ora ho bisogno di aggiungere a questo livello della BU tanti punti quanti sono necessari per ottenere un profitto totale, pari al precedentemente calcolato - $5.

3. Ed è qui che ho un blocco nel mio cervello. Cosa faccio: prendo $ 5, divido per il lotto totale di queste due posizioni (0,1 + 0,2 = 0,3), moltiplicato per TICK_VALUE

Ho 5/(0,3*1,0) = 16,6666 Poi lo moltiplico per Point (0,00016) e lo aggiungo al prezzo di Breakeven.

4. Perfetto. Le prese sono trasferite lì, ma mi sembra che il profitto totale di due Baiser che chiudono a questo livello non è uguale a 5 dollari - mi sembra meno. Questo può essere visto dal grafico dei test. Mostra chiaramente che quando si chiude una posizione, l'aumento del saldo è molto più grande di quando si chiudono più posizioni al livello di presa totale calcolato (si possono vedere questi posti sul grafico dall'aspetto della linea del capitale su di essi). Il grafico:


Dove mi sbaglio?

Capisco che si possa stampare il profitto totale, ma... Voglio capire dove potrei sbagliare nei miei calcoli, non il valore delle variabili. Li ho già stampati.

 
semiromid:

Ho un prezzo composto da 5 cifre. Esempio: 1,3221.


Significa 4 cifre. Cioè 4 o 5 dopo la virgola. Di cinque cifre, sarebbe, per esempio, 132210.
 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Signori programmatori, per favore consigliate come combinare un EA con un indicatore?

Per esempio, ho preso un semplice bot mo_bidir.mq4 che fa trading usando il suo proprio algoritmo e voglio che apra trade usando il suo stesso algoritmo ma dopo 3 segnali MA

Per esempio su segnale - Tre medie mobili:

FastEMA>MediumEMA>SlowEMA (tendenza up) - bot compra

FastEMA<MediumEMA<SlowEMA (tendenza giù) - bot vende

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod= 48;

Voglio che il mio Expert Advisor operi su timeframe 5 minuti e che l'indicatore dia segnali da timeframe giornaliero o 4 ore, e voglio essere in grado di cambiare timeframe nelle impostazioni del bot.

\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Mi scuso per la ripetizione, ma almeno ditemi in quale thread del forum applicare, o devo creare un nuovo thread?

Non so cosa fare.

 
Questo è il posto che fa per te : Lavoro
 

Ciao a tutti. Puoi spiegare perché OrderSend non apre una posizione?

if (NormalizeDouble(Open[0],Norm)>ma && NormalizeDouble(Bid,Norm)<=ma)

      {

      if (CheckFiltr()>=Filtr) 

         {

         Print (CheckFiltr()+" Buy"); <= Это в журнале есть, значит должна открыться сделка.

         for (i=0;i>5;i++)

            {

            res=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-Sl*Point,0,"OpenBuy",Magik,0,Green);

            Print ("Проверка Бай "+i); <= Этого в журнале нет.

            if (res>0) break;

            Print (GetLastError()); <= Этого в журнале нет.

            Sleep (5000);

            }

         }

      }   
 
for (i=0;i<5;i++)
 
artmedia70:

Sto diventando un po' pieno di me stesso... :) Il problema:

1. C'è una posizione aperta di 0,1 lotto

2. Il suo valore di TakeProfit è di 50 pip.

3. Calcolo il suo profitto potenziale secondo la formula PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE);

4. dal calcolo ottengo il profitto potenziale di $5,00 (0,1*50*1,0).

La posizione va in rosso e a un certo punto si apre un'altra media Buy, ma con 0,2 lotti

1. Calcolo il Breakeven per queste due posizioni. La funzione è stata usata per molto tempo, come richiesto, e non ho nessuna lamentela finora:

2. Perfetto. Avete calcolato il livello di pareggio, ma... se ci mettete i gettoni di queste due posizioni, si chiuderanno a zero. Ok, credo. Ora ho bisogno di aggiungere a questo livello della BU tanti punti quanti sono necessari per ottenere un profitto totale, pari al precedentemente calcolato - $5.

3. Ed è qui che ho un blocco nel mio cervello. Cosa faccio: prendo $ 5, divido per il lotto totale di queste due posizioni (0,1 + 0,2 = 0,3), moltiplicato per TICK_VALUE

Ho 5/(0,3*1,0) = 16,6666 Poi lo moltiplico per Point (0,00016) e lo aggiungo al prezzo di Breakeven.

4. Perfetto. Le prese sono trasferite lì, ma mi sembra che il profitto totale di due Baiser che chiudono a questo livello non è uguale a 5 dollari - mi sembra meno. Questo può essere visto dal grafico dei test. Mostra chiaramente che quando si chiude una posizione, l'aumento del saldo è molto più grande di quando si chiudono più posizioni al livello di presa totale calcolato (si possono vedere questi posti sul grafico dall'aspetto della linea del capitale su di essi). Il grafico:


Dove mi sbaglio?

Capisco che si possa stampare il profitto totale, ma... Voglio capire dove potrei sbagliare nei miei calcoli, non il valore delle variabili. Li ho già stampati.

anche se la posizione è Sell ?
File:
mr01.mq4  6 kb
 
FAQ:

for (i=0;i<5;i++)

Mi scusi, mi spieghi qual è l'errore qui. Non riesco a capirlo.

 
pako:
anche se la posizione è Sell ?

Sto parlando di posizioni di acquisto. Non è necessario essere così meticolosi. Naturalmente, per le posizioni Sell tolgo.