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

 
Vinin:

Victor, dai un'occhiata al tuo messaggio personale, per favore.
 
glasha:
Victor, dai un'occhiata al tuo messaggio personale, per favore.

Visto
 
dimon74:

OrderSend() si attiva ad ogni tick (come ho capito). Per eliminare il problema, mettete una variabile prima della funzione di inizio, per esempio int H=0.

Più avanti il codice:

..........

se ( H==0)

{

OrderSend(bla bla bla);

}

H=1;

E non c'è bisogno dell'algebra. E OrdersTotal() è meglio non essere usato per limitare.


Capisco, funziona per me, voglio dire che devo aprire 1 ordine e non si apre al prossimo tick

Il secondo ordine, il secondo ordine è necessario solo quando il primo si chiude

 

Se non mi sbaglio, deve essere così?

int H=0;

int F=OrdiniTotali();

..........

se(F<1)

{

se ( H==0)

{

OrderSend(bla bla bla);

}

H=1;}

 
gheka:

Se non mi sbaglio, deve essere così?

int H=0;

int F=OrdiniTotali();

..........

se(F<1)

{

se ( H==0)

{

OrderSend(bla bla bla);

}

H=1;}

total = CountTrades();
if (total < 1) {
ticket = OrderSend
}

int CountTrades() {
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
}
 
gheka:


è comprensibile, tutto funziona per me, cioè 1 ordine da aprire e non da aprire al prossimo tick

il secondo ordine, il secondo ordine è necessario solo quando il primo si chiude

Dovresti controllare qui.
 

Buon pomeriggio a tutti. Non sono molto bravo a scrivere EAs, ho cercato di imparare queste cose, ma ho appena iniziato ed è abbastanza difficile per me. Voglio scrivere un EA che apra gli scambi quando i prezzi attraversano una media mobile e li chiuda all'incrocio opposto, usando lo stop loss o il trailing stop. Ho trovato un esempio di un EA di questo tipo, ma non c'è nessun trailing stop o stop loss e i trade sono aperti e chiusi semplicemente all'incrocio. Non ho abbastanza conoscenze per questo. Voglio chiedere a qualcuno di aiutarmi dove mettere trailing stop e stoploss e come farlo funzionare:

#proprietà copyright "Jake Sunders"

#proprietà link "feloq@mail.ru"



#define STATE_SQUARE 0

#define STATE_LONG 1

#define STATE_SHORT 2



//---- parametri di ingresso

extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop=50;
extern double StopLoss= 50;


//---- variabili globali

int CurrentState;

int MyOrderTicket;

//+------------------------------------------------------------------+

//| funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int init()

{

//----

se (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])

CurrentState = STATE_SHORT;

else CurrentState = STATE_LONG;

MyOrderTicket = 0;
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
doppio MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
se ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //la media mobile è superiore al prezzo di chiusura
{
CurrentState = STATE_SHORT;
//girare per vendere
//-chiudere la posizione se aperta
se ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Errore alla chiusura della posizione: ", err);
ritorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- la posizione lunga è stata chiusa con successo
//--- ora apriamo una posizione di vendita
//--- controlla i fondi liberi
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Print("Errore all'apertura della posizione: ", err);
MyOrderTicket = 0;
}
}
}
else
{
if (MA < Close[1]) // scorre la media sotto il prezzo di chiusura
{
CurrentState = STATE_LONG;

//reverse per comprare
//-chiudere la posizione se aperta
se ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Errore alla chiusura della posizione: ", err);
ritorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- la posizione corta è stata chiusa con successo
//--- ora apriamo una posizione di acquisto
//--- controlla i fondi liberi
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Print("Errore all'apertura della posizione: ", err);
MyOrderTicket = 0;
}
}
}
//----
ritorno(0);
}

 

Gente, per favore consigliate! Come faccio ad aprire e chiudere una posizione alla scadenza di una candela o di candele? Cioè, si apre all'apertura di una nuova candela e si chiude

Come prendo i valori dell'indicatore alla chiusura di una candela?

 
gheka:

Ho ordini di acquisto e di vendita che si aprono allo stesso prezzo per quasi 50-100 posizioni,

come dovrei fare per aprire un solo ordine, se non mi sbaglio - OrdersTotal()

Se sì, come devo usarla e dove devo metterla? Sento che senza questa funzione devo inserire tutta l'algebra


Condizioni sbagliate per fare trading, vedi esempio per due MA.
 
Superjake:

Buon pomeriggio a tutti. Non sono molto bravo a scrivere EAs, ho cercato di imparare queste cose, ma ho appena iniziato ed è abbastanza difficile per me. Voglio scrivere un EA che apra gli scambi quando i prezzi attraversano una media mobile e li chiuda all'incrocio opposto, usando lo stop loss o il trailing stop. Ho trovato un esempio di un EA di questo tipo, ma non c'è nessun trailing stop o stop loss e i trade sono aperti e chiusi semplicemente all'incrocio. Non ho abbastanza conoscenze per questo. Voglio chiedere a qualcuno di aiutarmi dove mettere trailing stop e stoploss e come farlo funzionare:

#proprietà copyright "Jake Sunders"

#proprietà link "feloq@mail.ru"



#define STATE_SQUARE 0

#define STATE_LONG 1

#define STATE_SHORT 2



//---- parametri di ingresso

extern int MAPeriod=26;
extern double LotsNumber=1.0;
extern double TrailingStop=50;
extern double StopLoss= 50;


//---- variabili globali

int CurrentState;

int MyOrderTicket;

//+------------------------------------------------------------------+

//| funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int init()

{

//----

se (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])

CurrentState = STATE_SHORT;

else CurrentState = STATE_LONG;

MyOrderTicket = 0;
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
doppio MA;
MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
se ( CurrentState == STATE_LONG)
{
if (MA > Close[1]) //la media mobile è superiore al prezzo di chiusura
{
CurrentState = STATE_SHORT;
//girare per vendere
//-chiudere la posizione se aperta
se ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Print("Errore alla chiusura della posizione: ", err);
ritorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- la posizione lunga è stata chiusa con successo
//--- ora apriamo una posizione di vendita
//--- controlla i fondi liberi
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0,
NULL, 0, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Print("Errore all'apertura della posizione: ", err);
MyOrderTicket = 0;
}
}
}
else
{
if (MA < Close[1]) // scorre la media sotto il prezzo di chiusura
{
CurrentState = STATE_LONG;

//reverse per comprare
//-chiudere la posizione se aperta
se ( MyOrderTicket != 0)
{
if (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Print("Errore alla chiusura della posizione: ", err);
ritorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- la posizione corta è stata chiusa con successo
//--- ora apriamo una posizione di acquisto
//--- controlla i fondi liberi
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0,
NULL, 0, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Print("Errore all'apertura della posizione: ", err);
MyOrderTicket = 0;
}
}
}
//----
ritorno(0);
}


Guarda questo esempio