Vitaly Muzichenko: Mettete i prezzi tutti insieme o li prendete e poi li mettete nel calcolo?
Vitaly Muzichenko: Imposta i prezzi in una volta sola, o li ottiene e poi li incolla nel calcolo?
int k=periodo; for(int i=1; i<=periodo; i++) { H1_Close[i]=Close[k]; k--; } Prendo un pezzo di timesession uguale al periodo che parte dall'ultima barra chiusa e lo capovolgo nell'array, perché 1 è la penultima barra in timesession e il calcolo deve partire dall'i-esimo cioè la mia funzione dovrebbe restituire il valore SMMA dell'ultima barra chiusa.
Buon pomeriggio a tutti. Il codice qui sotto codifica una semplice idea. Se l'ultimo ordine chiuso era su SEL Se l'ultimo ordine chiuso era sulla NEL Aprire un ordine NEL
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY)) if ( OrderType ()==OP_SELL) X = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY)) if ( OrderType ()==OP_BUY) if(X < 0)
DOMANDA Quale costrutto di linguaggio può essere usato per aggiungere altre due condizioni a questo codice (cerchiato in rosso)
Se l'ultimo ordine chiuso è NEL Se l'ultimo ordine CEL ha chiuso Se l'ultimo ordine chiuso ha chiuso sulla NEL Se l'ultimo ordine chiuso è stato chiuso su unSL
Grazie per il vostro aiuto.
Vi sarei molto grato se poteste scrivere il codice e non solo spiegare cosa deve essere fatto.
Salve. Sto scrivendo uno script per cancellare tutti gli ordini in sospeso. Tuttavia, cancella solo un ordine. Ho sempre due ordini in sospeso o uno solo. In entrambi i casi cancella solo un Buy Stop. Per eliminare il Sell Stop è necessario eseguire nuovamente lo script, a condizione che non ci siano altri ordini Buy Stop. Si prega di avvisare dove si trova l'errore.
0B53RV3R: Salve. Sto scrivendo uno script per cancellare tutti gli ordini pendenti. Tuttavia, cancella solo un ordine. Ho sempre due ordini in sospeso o uno solo. In entrambi i casi cancella solo un Buy Stop. Per eliminare il Sell Stop è necessario eseguire nuovamente lo script, a condizione che non ci siano altri ordini Buy Stop. Si prega di avvisare dove si trova l'errore.
nullo CancellareOrdini()
{
int Total=OrdersTotal();
for(int i=0;i<Totale;i++)
if(OrderSelect(i,SELECT_BY_POS))
{
int type=OrderType(), ticket=OrderTicket();
bool c;
interruttore(tipo)
{
caso 4:
c=OrderDelete(ticket);
se(!c)
Print(GetLastError());
pausa;
caso 5:
c=OrderDelete(ticket);
se(!c)
Print(GetLastError());
pausa;
}
}
}
Cambia la direzione della ricerca for(i=totale-1;i>=0;i--)
Maxim Kuznetsov: cambiare la direzione della ricerca for(i=totale-1;i>=0;i--)
Grazie, ora funziona. Ho capito bene che quando un ordine con indice 0 viene cancellato, all'ordine con indice 1 viene assegnato l'indice 0, e alla prossima iterazione i == 1, e non c'è un ordine simile. Può dirmi se questo è il caso?
0B53RV3R: Grazie, ora funziona. Ho capito bene che quando un ordine con indice 0 viene cancellato, un ordine con indice 1 viene assegnato all'indice 0, e alla prossima iterazione i == 1, e non appare nessun ordine del genere. Puoi dire se questo è il caso?
C'è una funzione frattale personalizzabile, beh, cavolo, è terribilmente pesante. Ho lasciato il disegno degli oggetti solo per mostrare visivamente se i frattali si stanno formando correttamente - non ci sarà.
Domanda: come possiamo renderlo più facile, perché il test visivo è stupido:
externint FrLeft=15; // Баров слева externint FrRight=5; // Баров справа
//----------------------------------------------------------------------------------------------- voidOnTick() { int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара double FrHigh = High[nFrUp]; // Цена верхнего фрактала double FrLow = Low [nFrDn]; // Цена нижнего фрактала
C'è una funzione frattale personalizzabile, beh, cavolo, è terribilmente pesante. Ho lasciato il disegno degli oggetti solo per mostrare visivamente se i frattali si stanno formando correttamente - non succederà.
Domanda: come posso renderlo più facile, perché è stupido testarlo visivamente:
Grazie!
Si può solo rendere tutto più facile trasformandolo in un indicatore. Anche il commento nell'angolo superiore sinistro del grafico e soprattutto i segni di apertura e chiusura delle posizioni, che il tester stesso mette, stanno rallentando il test.
Mettete i prezzi tutti insieme o li prendete e poi li mettete nel calcolo?
Imposta i prezzi in una volta sola, o li ottiene e poi li incolla nel calcolo?
for(int i=1; i<=periodo; i++)
{
H1_Close[i]=Close[k];
k--;
}
Prendo un pezzo di timesession uguale al periodo che parte dall'ultima barra chiusa e lo capovolgo nell'array, perché 1 è la penultima barra in timesession e il calcolo deve partire dall'i-esimo
cioè la mia funzione dovrebbe restituire il valore SMMA dell'ultima barra chiusa.
Il codice qui sotto codifica una semplice idea.
Se l'ultimo ordine chiuso era su SEL
Se l'ultimo ordine chiuso era sulla NEL
Aprire un ordine NEL
if ( OrderType ()==OP_SELL)
X = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_BUY)
if(X < 0)
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );
DOMANDA
Quale costrutto di linguaggio può essere usato per aggiungere altre due condizioni a questo codice (cerchiato in rosso)
Se l'ultimo ordine chiuso è NEL
Se l'ultimo ordine CEL ha chiuso
Se l'ultimo ordine chiuso ha chiuso sulla NEL
Se l'ultimo ordine chiuso è stato chiuso su unSL
Grazie per il vostro aiuto.
Vi sarei molto grato se poteste scrivere il codice e non solo spiegare cosa deve essere fatto.
Salve. Sto scrivendo uno script per cancellare tutti gli ordini pendenti. Tuttavia, cancella solo un ordine. Ho sempre due ordini in sospeso o uno solo. In entrambi i casi cancella solo un Buy Stop. Per eliminare il Sell Stop è necessario eseguire nuovamente lo script, a condizione che non ci siano altri ordini Buy Stop. Si prega di avvisare dove si trova l'errore.
cambiare la direzione della ricerca for(i=totale-1;i>=0;i--)
Grazie, ora funziona. Ho capito bene che quando un ordine con indice 0 viene cancellato, un ordine con indice 1 viene assegnato all'indice 0, e alla prossima iterazione i == 1, e non appare nessun ordine del genere. Puoi dire se questo è il caso?
C'è una funzione frattale personalizzabile, beh, cavolo, è terribilmente pesante. Ho lasciato il disegno degli oggetti solo per mostrare visivamente se i frattali si stanno formando correttamente - non ci sarà.
Domanda: come possiamo renderlo più facile, perché il test visivo è stupido:
extern int FrRight=5; // Баров справа
//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow = Low [nFrDn]; // Цена нижнего фрактала
SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);
// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}
//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);
for(pos=nRight+1; pos<bars; pos++) {
r=nRight;
if(mode==MODE_UPPER) {
CopyHigh(symb,tf,0,pos+equals+1,_high);
for(i=1; i<=r; i++) {
if(_high[pos]<=_high[pos-i]) break;
}}
if(mode==MODE_LOWER) {
CopyLow(symb,tf,0,pos+equals+1,_low);
for(i=1; i<=r; i++) {
if(_low[pos]>=_low[pos-i]) break;
}}
//--
if(i==r+1) {
l=nLeft;
e=equals;
for(int j=1; j<=l+equals; j++) {
if(mode==MODE_UPPER) {
if(_high[pos]<_high[pos+j]) break;
if(_high[pos]>_high[pos+j]) l--;
if(_high[pos]==_high[pos+j]) e--;
}
if(mode==MODE_LOWER) {
if(_low[pos]>_low[pos+j]) break;
if(_low[pos]<_low[pos+j]) l--;
if(_low[pos]==_low[pos+j]) e--;
}
if(l==0) {
cn++;
if(cn>numFr) return(pos);
}
//--
if(e<0) break;
}}
}
Print(__FUNCTION__": Фрактал не найден");
return(0);
}
//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
}
}
Grazie!
C'è una funzione frattale personalizzabile, beh, cavolo, è terribilmente pesante. Ho lasciato il disegno degli oggetti solo per mostrare visivamente se i frattali si stanno formando correttamente - non succederà.
Domanda: come posso renderlo più facile, perché è stupido testarlo visivamente:
Grazie!
Salve. Potrebbe consigliare un nuovo arrivato?
Ecco un esempio:
se(Condizione1)
se(Condizione2)
{
}
else
{
}
Secondo il codice, Else dovrebbe riferirsi a if(condition1) e sarà eseguito se la condizione1 non è soddisfatta
Ma in realtà sarà eseguito anche se la condizione2 non è soddisfatta.
Salve. Potrebbe consigliare un nuovo arrivato?
Ecco un esempio:
se(Condizione1)
se(Condizione2)
{
}
else
{
}
Secondo il codice, Else dovrebbe riferirsi a if(condition1) e sarà eseguito se la condizione1 non è soddisfatta
Ma in realtà sarà eseguito se la condizione2 non è soddisfatta.
Prendi l'abitudine di mettere subito le bretelle ricce con la condizione
se(Condizione)
{
}
A secondo la sua domanda
{
if(Условие2)
{
}
}
else
{
}