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

 
_SS_:
Come posso determinare il tipo di ordine aperto?

OrderType()

In realtà, dovresti iniziare con un libro di testo... :) O almeno usare F1 in MetaEditor

int OrderType( )
Restituisce il tipo di ordine dell'ordine attualmente selezionato. Può essere uno dei seguenti valori:
OP_BUY - posizione di acquisto,
OP_SELL - vendere la posizione,
OP_BUYLIMIT - ordine di acquisto in sospeso al raggiungimento di un livello specificato, il prezzo corrente è superiore al livello,
OP_BUYSTOP - ordine di acquisto in sospeso quando il livello specificato viene raggiunto, il prezzo corrente è inferiore al livello,
OP_SELLLIMIT - ordine di vendita in sospeso quando il livello specificato viene raggiunto, il prezzo corrente è inferiore al livello,
OP_SELLSTOP - ordine di vendita in sospeso quando il livello specificato viene raggiunto, il prezzo corrente è sopra il livello.
L'ordine deve essere preselezionato utilizzando la funzione OrderSelect().
Esempio:
 int order_type; if(OrderSelect(12, SELECT_BY_POS)==true) { order_type=OrderType(); // ... } else Print("OrderSelect() ha restituito un errore - ",GetLastError());
 
gheka:

doppio NormalizeDouble( valore doppio, int cifre)

valore - Valore in virgola mobile. --- che cos'è?
cifre - Formato di precisione, il numero di cifre dopo il punto decimale (0-8). --- come 1,29800 sono 5 cifre, giusto?

Un valore in virgola mobile è un numero reale come il doppio

E invece delle cifre usate una variabile di tipo int

Per esempio int dg=MarketInfo ( Symbol(), MODE_DIGITS);

 
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;


bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell

//--------------------------------------------------------------- 3 --
// Учёт ордеров


for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;

if(Total!=0 || time==Time[1])return;

static int KolBars;



if (Close[0]-Open[0] > Point && Close[1]-Open[1] > Point && Bars == KolBars)


{

KolBars=Bars ; // запоминаем кол-во бар при которых совершались действия

}




// Торговые критерии

// Критерий откр. Buy


Opn_B=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0);time=Time[1];}

}




Per favore aiutatemi, lo chiedo per la 3a volta. Un EA elementare, apre una posizione di acquisto alla comparsa di una nuova candela (a condizione che le 2 candele precedenti siano verdi), e chiude la posizione alla chiusura della candela su cui la posizione è stata aperta, o alla chiusura della candela successiva.

Quello che vedi sopra apre una posizione ogni volta che appare una nuova candela, senza reagire al criterio di apertura, ma non capisco come chiudere la posizione, non l'ho trovato nel tutorial o sui forum.

 
artmedia70:

Il valore in virgola mobile è un numero reale di tipo doppio

E invece delle cifre usate una variabile di tipo int

Per esempio int dg=MarketInfo ( Symbol(), MODE_DIGITS);


Mi hanno scritto: "NormalizeDouble(), controlla il limite massimo/minimo del lotto, se cinque cifre - aumenta stop e profitto di 10 volte".


La documentazione dice: "Arrotondamento del numero in virgola mobile alla precisione specificata. I valori di StopLoss e TakeProfit calcolati, così come i prezzi di apertura degli ordini in sospeso devono essere normalizzati alla precisione, il cui valore è memorizzato nella variabile predefinita digits".

Non l'ho trovato nel libro di testo. Ho capito che devo normalizzare il prezzo corrente, StopLoss e TakeProfit con NormalizeDouble --- come devo normalizzarlo?

doppio NormalizeDouble( valore doppio, int cifre)

valore doppio -- invece di valore doppio posso usare ad esempio Prise

int digits -- e questa variabile dg è uguale a MarketInfo( Symbol(), MODE_DIGITS); ???

 
gheka:


Mi è stato scritto: "NormalizeDouble(), controlla il limite massimo/minimo del lotto, se cinque cifre - aumenta stop e profitto di 10 volte".


La documentazione dice: "Arrotondamento del numero in virgola mobile alla precisione specificata. I valori di StopLoss e TakeProfit calcolati, così come i prezzi di apertura degli ordini in sospeso devono essere normalizzati alla precisione, il cui valore è memorizzato nella variabile predefinita Digits".

Non l'ho trovato nel tutorial, ho capito che devo usare NormalizeDouble --- per normalizzare il prezzo corrente, StopLoss e TakeProfit? Se sì, come esattamente?

doppio NormalizeDouble( valore doppio, int cifre)

valore doppio -- al suo posto, posso impostare ad esempio Prise

int digits -- e questa variabile dg è uguale a MarketInfo( Symbol(), MODE_DIGITS); ???

int StopLoss=50; // StopLoss in pip

int TakeProfit=150; // TakeProfit in pip

intOrderDistance=50; // distanza dell'ordine in sospeso in punti

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT); // Dimensione del punto nella valuta della quotazione

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Numero di cifre dopo il punto decimale nel prezzo del simbolo

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Livello minimo consentito di stop loss/stake profit in punti

double pa=MarketInfo(Symbol(), MODE_ASK); // Prezzo richiesto

double pb=MarketInfo(Symbol(), MODE_BID); // Prezzo di offerta

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

double slB=NormalizeDouble(pa-StopLoss*pt, dg); // normalizza il livello di prezzo dello StopLoss per la posizione Buy

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // normalizza il livello di prezzo TakeProfit per la posizione Bid

double slS=NormalizeDouble(pb+StopLoss*pt, dg); // normalizza il livello di prezzo StopLoss per la posizione Sell

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // normalizza il livello di prezzo TakeProfit per la posizione Sell

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // normalizza il livello di prezzo per piazzare un ordine pendente Buy

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // normalizza il prezzo per piazzare un ordine pendente Sell

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // normalizza il livello di prezzo dello StopLoss per un ordine di acquisto pendente

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // normalizza il livello di prezzo di TakeProfit dell'ordine di acquisto pendente

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // normalizza il livello di prezzo dello StopLoss per l'ordine di vendita pendente

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalizza il livello di prezzo di TakeProfit dell'ordine di vendita pendente

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Capirlo... :)

E non dimenticare lo StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Controllate la distanza minima per impostare le fermate e i prelievi in modo che non sia inferiore a questo valore

 
artmedia70:

int StopLoss=50; // StopLoss in punti

int TakeProfit=150; // TakeProfit in punti

intOrderDistance=50; // distanza dell'ordine in sospeso in punti

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT); // Dimensione del punto nella valuta della quotazione

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Numero di cifre dopo il punto decimale nel prezzo del simbolo

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Livello minimo consentito di stop loss/stake profit in punti

double pa=MarketInfo(Symbol(), MODE_ASK); // Prezzo richiesto

double pb=MarketInfo(Symbol(), MODE_BID); // Prezzo di offerta

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

double slB=NormalizeDouble(pa-StopLoss*pt, dg); // normalizza il livello di prezzo dello StopLoss per la posizione Buy

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // normalizza il livello di prezzo TakeProfit per la posizione Bid

double slS=NormalizeDouble(pb+StopLoss*pt, dg); // normalizza il livello di prezzo dello StopLoss per la posizione Sell

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // normalizza il livello di prezzo TakeProfit per la posizione Sell

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // normalizza il livello di prezzo per piazzare un ordine pendente Buy

double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // normalizza il prezzo per piazzare un ordine pendente Sell

double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // normalizza il livello di prezzo dello StopLoss per un ordine di acquisto pendente

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // normalizza il livello di prezzo di TakeProfit dell'ordine di acquisto pendente

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // normalizza il livello di prezzo dello StopLoss per l'ordine di vendita pendente

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalizza il livello di prezzo di TakeProfit dell'ordine di vendita pendente

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Capirlo... :)

E non dimenticate lo StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Controllate la distanza minima per impostare le fermate e i prelievi in modo che non sia inferiore a questo valore


Grazie mille!!! Ci darò un'occhiata! )
 
Come posso creare una funzione e chiamarla?
 

C'è una notifica sonora, c'è una voce di registro, ma la finestra fluttuante non si apre.

Ho pulito il terminale, ricompilato tutto. quale potrebbe essere la ragione?

 
_SS_:
Come posso creare una funzione e chiamarla?
Per l'ennesima volta, leggi un libro di testo e impara le basi... :)
 
artmedia70:
Per l'ennesima volta, leggere un libro di testo, studiare il materiale... :)
Ho provato, non funziona!