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

 

Potete dirmi come confrontare correttamente il prezzo attuale o la media mobile con la linea di tendenza?

Grazie in anticipo.

    double maH_fast=iMA(NULL,fast_maH_timeframe,fast_maH_period,0,fast_maH_method,fast_maH_price,0);

    if (ObjectFind("Tr_S1")==-1)
     {
      Create_Tr_S("Tr_S1",White,timf2s,TF2S,timf1s,TF1S);
     }

    if(maH_fast>"Tr_S1")
     {...}
 
ikatsko:

COME FARESTE A CONTARE IL NUMERO DI POSIZIONI LUNGHE REDDITIZIE E SEPARATAMENTE IL NUMERO DI POSIZIONI CORTE REDDITIZIE?

La strategia è la seguente: se il numero di posizioni lunghe redditizie dall'inizio dell'EA (o meglio - per l'intera storia del conto) è maggiore del numero di posizioni corte, allora solo le posizioni lunghe dovrebbero essere aperte. E viceversa.

È chiaro come contare queste operazioni, se sono chiuse dall'Expert Advisor: Close - Count. Ma se una posizione viene chiusa da TP o SL, allora ... ?

Forse qualcuno ha un codice pronto della funzione?


int ProfitableOrdersOfLongs(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()==0)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
//====================================================================================================== 
int ProfitableOrdersOfShorts(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()=1)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
 
nemo811:

Potete dirmi come confrontare correttamente il prezzo attuale o la media mobile con la linea di tendenza?

Grazie in anticipo.

Una linea di tendenza ha un punto iniziale con coordinate tempo-prezzo e un punto finale con coordinate tempo-prezzo.

Puoi usare l'equazione della linea retta con le stesse coordinate per trovare il livello di prezzo in qualsiasi punto che sia tra queste due coordinate del segmento costruito e confrontare i livelli di prezzo di MAA e il punto di incrocio della barra desiderata con questa linea...

Potete leggere - c'è una descrizione dettagliata di un tale esempio.

 
Roman.:

Si prende l'ultimo ordine chiuso, si confronta il suo tempo di chiusura con il precedente chiuso usando OrderCloseTime(), se è lo stesso, lo si confronta con il tempo di chiusura del precedente ordine chiuso... come questo, naturalmente, è tutto in un ciclo - dall'ultimo chiuso al primo, si va uno dopo l'altro e si confronta il tempo di chiusura degli ordini... Un'altra cosa - stampate i valori temporali degli ultimi ordini che sapete in anticipo, che hanno chiuso allo stesso tempo (secondo la vostra stima), diciamo tre ordini, può essere diverso, anche se lo intendete come " simultaneamente", cioè, come lo intendo io, l'ordine chiude in qualsiasi momento, cioè In realtà, il tempo di chiusura di, diciamo, tre ordini contemporaneamente non può essere lo stesso - provate a stampare() e vedere i valori dei vostri tre ordini TIME - i loro valori di OrderCloseTime() caratteristiche, cioè, potremmo dover introdurre il concetto di TEMPO di chiusura, cioè, deviazione del tempo di chiusura di diversi ordini di qualche piccolo valore quando possiamo considerare che hanno chiuso contemporaneamente. Sperimentate e vedete voi stessi da qui.

Grazie, ha funzionato, ma ora apre un ordine multiplo

L'ho fatto così

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
 
vik-777:

Grazie, ha funzionato, ma ora si apre un ordine multiplo

L'ho fatto così

Problema risolto, grazie a tutti.

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
     a = OrdersHistoryTotal();
     if (a>w)
     {
     if (sarik>0)
      {   
      OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,4),1,Ask - SL1*Point,Ask + 10*Point,0,2);
      w++;
      }
 
nemo811:

Potete dirmi come confrontare correttamente il prezzo attuale o la media mobile con la linea di tendenza?

1. if(maH_fast>"Tr_S1") {...} -- errore: maH_fast è un numero reale, "Tr_S1"- valore di tipo stringa;
2. double ObjectGetValueByShift( string name, int shift)
La funzione calcola e restituisce il valore del prezzo per la barra specificata (offset dalla barra corrente). Il valore del prezzo è calcolato utilizzando l'equazione lineare basata sulle prime e seconde coordinate. Si applica alle linee di tendenza.
Parametri:
name - Nome dell'oggetto.
shift - Numero di barra.
Esempio: double price=ObjectGetValueByShift("MyTrendLine#123", 11);
 
Salve, ho questa domanda... diciamo che iHighest e iLowest possono essere usati per trovare il numero della barra con il valore massimo di high/low per un certo periodo, ma come posso trovare il valore massimo dell'indicatore st Dev per un certo numero di barre?
 
double maxdev,mindev=1;
for(int i=0;i<counbar;i>0)
{
double val=iStdDev(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i);
if(mindev>val)mindev=val;
if(maxdev<val)maxdev=val;
}
Print("maxdev - ",maxdev," mindev - ",mindev);
Da qualche parte così.
 
7sintez:

Ho guardato tutto, ho fatto tutto... Non aprirà una posizione, ecco tutto! Si chiude correttamente, ma non si apre... Non so cosa fare! Forse qualcuno troverà un bug nel programma?




Apre e chiude correttamente gli ordini su EURUSD a 5 minuti. Leggeri problemi di modifica, spesso cerca di modificare con gli stessi valori, quindi errori frequenti.
 

Ciao a tutti. Aiuto per un principiante, per favore:

Linea di fondo.

1) Il periodo è di 1 giorno.

2)C'è un ordine aperto OrderSend(...). Ha SL e TP. Come condizione aggiuntiva allo stop e alla perdita, dobbiamo impostare l'ordine per vivere dal momento in cui è stato aperto fino a 18 ore, e poi chiuderlo al prezzo corrente.

Ciò significa che una delle tre condizioni deve essere soddisfatta:

1. viene attivato uno stop loss

o

2. viene attivato il take profit

o

3. Dato che non sono stati attivati né stop loss né take profit, la posizione viene chiusa 18 ore dopo essere stata aperta al prezzo corrente.

Ecco come impostare questa condizione temporale, eh?


Domanda 2:

Come scrivere correttamente la condizione che l'evento deve verificarsi se (periodo di 1 giorno):

- CLOSE della barra corrente è maggiore di C della barra precedente e maggiore di C della barra precedente, e C della barra precedente è anche maggiore di C della barra precedente.


Non si preoccupi, per favore. Ero seduto su Rumus prima, e sono in procinto di ricostruire...