Scrivo indicatori, EAs, non più gratis :) - pagina 6

 
KimIV >> :
Parametri di funzione errati. Controllate esattamente cosa passate alla funzione OrderClose().

Controllato... Davvero non so quale sia il problema... Ho provato tante cose diverse %(

 

Buona sera di nuovo :)

Con una nuova richiesta. Mi sono reso conto che non sarò comunque in grado di capirlo da solo.

Sto chiedendo di scrivere un EA basato sull'indicatore WATR (codice EA qui sotto). Quando l'indicatore fa un giro, chiude l'ordine aperto (se non è stato chiuso da SL o TP) e apre un nuovo ordine nella direzione indicata dall'indicatore. Apriamo un solo ordine esattamente al punto di inversione. Poi aspettiamo la prossima inversione dell'EA.

Parametri di input: dimensione del lotto, SL, TP, slippage. Penso di non aver dimenticato nulla :)

Saluti, Svetlana. ICQ 320355718

Codice dell'indicatore:

//+------------------------------------------------------------------+
//| WATR.mq4
//| Scritto da WizardSerg sotto l'articolo konkop in |
//| "Modern trading" #4/2001 |
//| http://www.wizardserg.inweb.ru |
//| wizardserg@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Scritto da WizardSerg sotto l'articolo konkop in <Modern trading> #4/2001".
#proprietà link "http://www.wizardserg.inweb.ru"
//----
#proprietà indicator_chart_window
#proprietà indicator_buffers 2
#proprietà indicator_color1 Coral
#property indicator_color2 DodgerBlue
//---- parametri di ingresso
extern inttern WATR_K = 10;
extern double WATR_M = 4.0;
extern inttern ATR = 21;
//---- buffer
doppio ExtMapBufferUp[];
doppio ExtMapBufferDown[];
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(2);
SetIndexBuffer(0, ExtMapBufferUp);
ArraySetAsSeries(ExtMapBufferUp, true);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(1, ExtMapBufferDown);
ArraySetAsSeries(ExtMapBufferDown, true);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
IndicatoreNomeCorto("WATR(" + WATR_K + ", " + WATR_M + ")");
SetIndexLabel(0, "WATR_Up");
SetIndexLabel(1, "WATR_Dn");
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int deinit()
{
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione indicatore personalizzato
//+------------------------------------------------------------------+
bool AntiTrendBar(int i)
{
bool res = (TrendUp(i) && (Close[i] < Open[i]) ||
(!TrendUp(i) && (Close[i] > Open[i]);
return(res);
}
//+------------------------------------------------------------------+
//| funzione indicatore personalizzato
//+------------------------------------------------------------------+
doppio CalcIndicValue(int i, bool trend)
{
doppio res = Close[i];
se(tendenza)
res -= (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i))
else
res += (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i));
return(res);
}
//+------------------------------------------------------------------+
//| funzione indicatore personalizzato
//+------------------------------------------------------------------+
bool TrendUp(int i)
{
return((Close[i+1] > ExtMapBufferUp[i+1]) &&
(ExtMapBufferUp[i+1] != EMPTY_VALUE))
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int start()
{
limite int;
int counted_bars = IndicatorCounted();
//---- l'ultima barra contata sarà ricalcolata
//---- primo valore dell'indicatore == prezzo-1 punto,
//cioè, considera la tendenza al rialzo
ExtMapBufferUp[Bars] = Close[Bars] - WATR_K*Point;
// limit = (counted_bars > 0) ? (Bars - counted_bars) : (Bars - 1);
limite = Bars - counted_bars;
//---- ciclo principale
for(int i = limite; i >= 0; i--)
{
se(AntiTrendBar(i))
{
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
}
else
{
se(TrendUp(i))
{
ExtMapBufferUp[i] = CalcIndicValue(i, true);
if(ExtMapBufferUp[i] < ExtMapBufferUp[i+1])
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = EMPTY_VALUE;
}
else
{
ExtMapBufferDown[i] = CalcIndicValue(i, false);
se(ExtMapBufferDown[i] > ExtMapBufferDown[i+1])
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
ExtMapBufferUp[i] = EMPTY_VALUE;
}
}
// prezzo di attraversamento
if(TrendUp(i) && (Close[i] < ExtMapBufferUp[i])
{
ExtMapBufferDown[i] = CalcIndicValue(i, false);
ExtMapBufferUp[i] = EMPTY_VALUE;
}
se((!TrendUp(i)) && (Close[i] > ExtMapBufferDown[i])
{
ExtMapBufferUp[i] = CalcIndicValue(i, true);
ExtMapBufferDown[i] = EMPTY_VALUE;
}
}
ritorno(0);
}
//+------------------------------------------------------------------+



 
rusmos писал(а) >>

Scusatemi, ma potreste scrivere del codice per il seguente problema - il primo lotto, per esempio 0,1, e ogni lotto successivo aumenta di un certo valore dato.

Grazie in anticipo.

Cerca questo forum, tale già chiesto e scritto...

In ogni caso c'è qualcosa di simile...

 
StatBars >> :

Cerca in questo forum, è stato chiesto e scritto...

Grazie >> Ho frugato nel forum per circa tre ore, ho trovato molto, ma non questo.

 
StatBars >> :

Cerca in questo forum, è stato chiesto e scritto prima...

E il codice è probabilmente di 10 termini al massimo.

Ma immagino che qui non si occupino di cose insignificanti.

 
rusmos >> :

E il codice è probabilmente di 10 termini al massimo.

Ma immagino che qui i professionisti non vadano per le inezie.

Sarebbe bello formalizzare il compito non solo approssimativamente, ma concretamente, in modo che qualcuno se ne faccia carico.

 
rusmos писал(а) >>

E il codice è probabilmente di 10 termini al massimo.

Ma i professionisti probabilmente non vanno per le piccole cose qui.

Per favore, formuli correttamente la sua domanda. Il primo ordine, i successivi. Il primo da cosa? Dall'inizio dell'Universo, o dal giorno in cui è venuto Cristo, o dalla creazione del mondo, o forse dal momento in cui hai fatto colazione e sei andato a fare una passeggiata? Quali sono le domande, quali sono le risposte.

 
rusmos писал(а) >>

E il codice è probabilmente di 10 termini al massimo.

Ma credo che qui non vadano per le piccole cose.

extern double RISK=20;


lotsize=MarketInfo(Symbol(),MODE_LOTSIZE)*0.01;
Balance=AccountBalance()*( RISK/100);
lots=NormalizeDouble( Balance/ lotsize,2); // - это и есть лот для открытия позиции
Il codice non solo aumenta il lotto, ma anche lo riduce, tutto dipende dal depo, il depo sale - il lotto sale... Ho pensato che avessi bisogno di questo...
 
sol >> :

Sarebbe bello formalizzare il compito non solo approssimativamente, ma concretamente, in modo che qualcuno possa assumerlo.

OK. Il primo lotto è Buy con il lotto 0.1. In risposta, il SellStop è immediatamente impostato a 20 punti dal fondo con un lotto di 0,2 (cioè un aumento di 0,1)

Inoltre, se il Sell è scattato, nella risposta impostiamo il Bystop con 0,3 lotti (cioè aumentiamo il LAST lot ancora di 0,1) e in linea di principio così e così.

È importante che l'entità dell'aumento del lotto sia regolata a vostra discrezione.

Beh, rispettivamente due opzioni interessanti. Addizione e moltiplicazione.

>> Ugh, penso che sia così).

 
StatBars >> :
Il codice non solo aumenta il lotto ma anche lo diminuisce, tutto dipende dal depo, il depo sale - il lotto sale... Ho pensato che avessi bisogno di questo...

La dimensione del deposito non ha importanza.