J'écris des indicateurs, des EA, mais plus gratuitement :) - page 6

 
KimIV >> :
Paramètres de fonction incorrects. Vérifiez exactement ce que vous passez à la fonction OrderClose().

Je l'ai vérifié... Je ne sais vraiment pas quel est le problème... J'ai essayé tellement de choses différentes %(

 

Bonsoir à nouveau :)

Avec une nouvelle demande. J'ai réalisé que je ne serai pas capable de le découvrir par moi-même de toute façon.

Je demande à écrire un EA basé sur l'indicateur WATR (code EA ci-dessous). Lorsque l'indicateur fait un virage, il ferme l'ordre ouvert (s'il n'a pas été fermé par le SL ou le TP) et ouvre un nouvel ordre dans la direction indiquée par l'indicateur. Nous n'ouvrons qu'un seul ordre exactement au point de retournement. Ensuite, nous attendons le prochain renversement de l'EA.

Paramètres d'entrée : taille du lot, SL, TP, slippage. Je pense que je n'ai rien oublié :)

Salutations, Svetlana. ICQ 320355718

Code de l'indicateur :

//+------------------------------------------------------------------+
//| WATR.mq4
//| Écrit par WizardSerg sous l'article konkop en |
//| "Modern trading" #4/2001 |
//| http://www.wizardserg.inweb.ru |
//| wizardserg@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Écrit par WizardSerg sous l'article konkop dans <Modern trading> #4/2001"
#lien de propriété "http://www.wizardserg.inweb.ru"
//----
#property indicator_chart_window
#property indicator_buffers 2
#propriété indicator_color1 Coral
#property indicator_color2 DodgerBlue
//---- paramètres d'entrée
extern inttern WATR_K = 10 ;
extern double WATR_M = 4.0 ;
extern inttern ATR = 21 ;
//---- tampons
double ExtMapBufferUp[] ;
double ExtMapBufferDown[] ;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
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) ;
IndicatorShortName("WATR(" + WATR_K + ", " + WATR_M + ")") ;
SetIndexLabel(0, "WATR_Up") ;
SetIndexLabel(1, "WATR_Dn") ;
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
int deinit()
{
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| Fonction d'indicateur personnalisé |
//+------------------------------------------------------------------+
bool AntiTrendBar(int i)
{
bool res = (TrendUp(i) && (Close[i] < Open[i]) ||
(!TrendUp(i) && (Close[i] > Open[i]) ;
retour(res) ;
}
//+------------------------------------------------------------------+
//| Fonction d'indicateur personnalisé ||
//+------------------------------------------------------------------+
double CalcIndicValue(int i, bool trend)
{
double res = Close[i] ;
si(tendance)
res -= (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i))
sinon
res += (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i)) ;
retour(res) ;
}
//+------------------------------------------------------------------+
//| Fonction d'indicateur personnalisé |
//+------------------------------------------------------------------+
bool TrendUp(int i)
{
return((Close[i+1] > ExtMapBufferUp[i+1]) &&
(ExtMapBufferUp[i+1] != EMPTY_VALUE))
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
int start()
{
int limite ;
int counted_bars = IndicatorCounted() ;
//---- la dernière barre comptée sera recalculée
//---- première valeur de l'indicateur == prix-1 point,
//c'est-à-dire qu'il considère que la tendance est à la hausse
ExtMapBufferUp[Bars] = Close[Bars] - WATR_K*Point ;
// limite = (barres comptées > 0) ? (Bars - counted_bars) : (Bars - 1) ;
limite = Barres - barres comptées ;
//---- boucle principale
for(int i = limite ; i >= 0 ; i--)
{
if(AntiTrendBar(i))
{
ExtMapBufferUp[i] = ExtMapBufferUp[i+1] ;
ExtMapBufferDown[i] = ExtMapBufferDown[i+1] ;
}
sinon
{
if(TrendUp(i))
{
ExtMapBufferUp[i] = CalcIndicValue(i, true) ;
if(ExtMapBufferUp[i] < ExtMapBufferUp[i+1])
ExtMapBufferUp[i] = ExtMapBufferUp[i+1] ;
ExtMapBufferDown[i] = EMPTY_VALUE ;
}
sinon
{
ExtMapBufferDown[i] = CalcIndicValue(i, false) ;
if(ExtMapBufferDown[i] > ExtMapBufferDown[i+1])
ExtMapBufferDown[i] = ExtMapBufferDown[i+1] ;
ExtMapBufferUp[i] = EMPTY_VALUE ;
}
}
// prix de passage
if(TrendUp(i) && (Close[i] < ExtMapBufferUp[i])
{
ExtMapBufferDown[i] = CalcIndicValue(i, false) ;
ExtMapBufferUp[i] = EMPTY_VALUE ;
}
si(!TrendUp(i)) && (Close[i] > ExtMapBufferDown[i])
{
ExtMapBufferUp[i] = CalcIndicValue(i, true) ;
ExtMapBufferDown[i] = EMPTY_VALUE ;
}
}
retour(0) ;
}
//+------------------------------------------------------------------+



 
rusmos писал(а) >>

Excusez-moi, mais pourriez-vous écrire du code pour le problème suivant : le premier lot est par exemple de 0,1, et chaque lot suivant est augmenté d'une certaine valeur donnée.

Merci d'avance.

Cherchez dans ce forum, de telles questions ont déjà été posées et écrites...

En tout cas, il y a quelque chose de similaire...

 
StatBars >> :

Cherchez dans ce forum, la question a été posée et écrite...

Merci >> Je fouille le forum depuis environ trois heures maintenant, j'ai trouvé beaucoup de choses, mais pas ça.

 
StatBars >> :

Cherchez dans ce forum, la question a déjà été posée et écrite...

Et le code est probablement de 10 termes au maximum.

Mais je suppose qu'ils ne font pas dans la mesquinerie ici.

 
rusmos >> :

Et le code est probablement de 10 termes au maximum.

Mais je suppose que les professionnels ne s'intéressent pas aux broutilles ici.

Il serait bon de formaliser la tâche non seulement approximativement, mais concrètement, afin que quelqu'un s'en charge.

 
rusmos писал(а) >>

Et le code est probablement de 10 termes au maximum.

Mais les pros ne s'intéressent probablement pas aux petites choses par ici.

Veuillez formuler votre question correctement. Le premier ordre, les suivants. Le premier est de quoi ? Depuis le début de l'Univers, ou depuis le jour où le Christ est venu, ou la création du monde, ou peut-être depuis le moment où vous avez pris votre petit-déjeuner et êtes allé vous promener ? Quelles sont les questions, quelles sont les réponses.

 
rusmos писал(а) >>

Et le code est probablement de 10 termes au maximum.

Mais je suppose qu'ils ne font pas attention aux petites choses ici.

extern double RISK=20;


lotsize=MarketInfo(Symbol(),MODE_LOTSIZE)*0.01;
Balance=AccountBalance()*( RISK/100);
lots=NormalizeDouble( Balance/ lotsize,2); // - это и есть лот для открытия позиции
Le code n'augmente pas seulement le lot, mais le réduit aussi, tout dépend du dépo, le dépo augmente - le lot augmente.... Je pensais que tu avais besoin de ça...
 
sol >> :

Il serait bon de formaliser la tâche, non seulement approximativement, mais concrètement, afin que quelqu'un puisse l'assumer.

OK. Le premier lot est acheté avec le lot 0.1. En réponse, le SellStop est immédiatement fixé à 20 points du bas avec 0,2 lot (c'est-à-dire une augmentation de 0,1).

En outre, si la vente s'est déclenchée, dans la réponse, nous fixons le Bystop à 0,3 lot (c'est-à-dire que nous augmentons à nouveau le DERNIER lot de 0,1) et, en principe, untel.

Il est important que l'ampleur de l'augmentation du lot soit ajustée à votre discrétion.

Eh bien, respectivement, deux options intéressantes. Addition et multiplication.

>> Ugh, je pense que c'est ça.)

 
StatBars >> :
Le code n'augmente pas seulement le lot mais le diminue aussi, tout dépend du dépo, le dépo augmente - le lot augmente.... Je pensais que tu avais besoin de ça...

Le montant du dépôt n'a pas d'importance.