Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 509

 

Les gars, dites-moi un robot. Un qui utilise Martin.

Par exemple, j'ouvre un ordre et le robot continue à travailler...

 
Zolotai:

Les amis, proposez un robot qui utilise Martin.

Par exemple, j'ouvre un ordre et le robot continue à travailler...

Code Base
 

Bonjour. J'essaie de comprendre comment les événements fonctionnent. Je n'ai PAS travaillé l'événement de suppression d'un objet du graphique(CHARTEVENT_OBJECT_DELETE). Supprimé à la fois avec la souris et par la liste d'objets. Construire 600.

Dites-moi ce qui ne va pas.

J'utilise le code de l'aide

#define KEY_NUMPAD_5 12
#define KEY_LEFT 37
#define KEY_UP 38
#define KEY_RIGHT 39
#define KEY_DOWN 40
#define KEY_NUMLOCK_DOWN 98
#define KEY_NUMLOCK_LEFT 100
#define KEY_NUMLOCK_5 101
#define KEY_NUMLOCK_RIGHT 102
#define KEY_NUMLOCK_UP 104
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Print("Запущен эксперт с именем ",MQLInfoString(MQL_PROGRAM_NAME));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, // идентификатор события
const long& lparam, // параметр события типа long
const double& dparam, // параметр события типа double
const string& sparam) // параметр события типа string
{
//--- нажатие левой кнопкой мышки на графике
if(id==CHARTEVENT_CLICK)
{
Print("Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam);
}
//--- нажатие мышкой на графическом объекте
if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
}
//--- нажатие кнопки на клавиатуре
if(id==CHARTEVENT_KEYDOWN)
{
switch(int(lparam))
{
case KEY_NUMLOCK_LEFT: Print("Нажата KEY_NUMLOCK_LEFT"); break;
case KEY_LEFT: Print("Нажата KEY_LEFT"); break;
case KEY_NUMLOCK_UP: Print("Нажата KEY_NUMLOCK_UP"); break;
case KEY_UP: Print("Нажата KEY_UP"); break;
case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT"); break;
case KEY_RIGHT: Print("Нажата KEY_RIGHT"); break;
case KEY_NUMLOCK_DOWN: Print("Нажата KEY_NUMLOCK_DOWN"); break;
case KEY_DOWN: Print("Нажата KEY_DOWN"); break;
case KEY_NUMPAD_5: Print("Нажата KEY_NUMPAD_5"); break;
case KEY_NUMLOCK_5: Print("Нажата KEY_NUMLOCK_5"); break;
default: Print("Нажата какая-то неперечисленная клавиша");
}
ChartRedraw();
}
//--- удален объект
if(id==CHARTEVENT_OBJECT_DELETE)
{
Print("Удален объект с именем ",sparam);
}
//--- создан объект
if(id==CHARTEVENT_OBJECT_CREATE)
{
Print("Создан объект с именем ",sparam);
}
//--- перемещен объект или изменены координаты точек привязки
if(id==CHARTEVENT_OBJECT_DRAG)
{
Print("Изменение точек привязки объекта с именем ",sparam);
}
//--- изменен текст в поле ввода графического объекта Edit
if(id==CHARTEVENT_OBJECT_ENDEDIT)
{
Print("Изменен текст в объекте Edit ",sparam);
}
}


 

Chers membres du forum, aidez-moi à comprendre, i est la bougie actuelle, pourquoi i-2 ne veut pas tracer une ligne, le testeur s'arrête en cours d'exécution.

ObjectCreate("line",OBJ_VLINE,0,Time[i-2],Open[1]);
 
Alexandr24:

Chers membres du forum, aidez-moi à comprendre, i est la bougie actuelle, pourquoi i-2 ne veut pas tracer une ligne, le testeur s'arrête en cours d'exécution.


Si vous essayez de tracer une ligne 2 bougies plus tôt à partir du i, alors vous devez ajouter 2, pas soustraire, car la numérotation des bougies va de droite à gauche, 0-barre actuelle.
Si vous essayez de tracer des lignes sur une barre qui n'existe pas encore (-2), l'indice du tableau ne peut pas être négatif. Pour ce faire, calculez le temps de la barre nécessaire, par exemple Time[0]+2*(Time[0]-Time[1]).
 
isn-88:

Si vous essayez de tracer une ligne à 2 bougies devant la i-ième bougie, vous devez ajouter 2, et non soustraire, car la numérotation des bougies va de droite à gauche, de 0 à la barre actuelle.
Si vous essayez de tracer des lignes sur une barre qui n'existe pas encore (-2), l'indice du tableau ne peut pas être négatif. Pour ce faire, vous devez calculer le temps de la barre que vous voulez, par exemple, Time[0]+2*(Time[0]-Time[1]).

Merci beaucoup, la ligne aurait dû être tracée sur une barre qui n'existe pas (-2).
 
Alexandr24:

Merci beaucoup, la ligne aurait dû être tracée sur une barre qui n'existe pas (-2).

Sinon, pourquoi y aurait-il un prix ? Après tout, l'objet est basé sur le temps.
 
Alexandr24:

Merci beaucoup, la ligne aurait dû être construite sur une barre (-2) qui n'existe pas.

S'il vous plaît
Voici une autre "belle" solution

Time[0]+Period()*60*2 //60 переводим в секунды, 2 кол-во баров

 

Les amis, aidez-moi à démarrer. Vous devez ouvrir une commande.

input int TakeProfit = 30;

input double StartLot = 0.01;

input double summ=false; //true, открываем позиции в обе стороны

input int Slippage = 30; // установим значение проскальзывания



void OnTick()

{

if(summ) { // открываем однупозицию, покупка.

OrderSend(

Symbol(),

OP_BUY,

StartLot,

NormalizeDouble(NormalizeDouble(Ask,_Digits),_Digits),

Slippage,

0,

TakeProfit,

WindowExpertName()+" "+(string)0,

0,

0,

clrBlue

);

}else{

OrderSend(

Symbol(),

OP_BUY,

StartLot,

NormalizeDouble(NormalizeDouble(Ask,_Digits),_Digits),

Slippage,

0,

TakeProfit,

WindowExpertName()+" "+(string)0,

0,

0,

clrBlue

);

OrderSend(

Symbol(),

OP_SELL,

StartLot,

NormalizeDouble(NormalizeDouble(Bid,_Digits),_Digits),

Slippage,

0,

TakeProfit,

WindowExpertName()+" "+(string)0,

0,

0,

clrBlue

);

}

}

Ça ne marche pas, qu'est-ce qui ne va pas ?

Ecrire un code qui va juste ouvrir une position. C'est tout ce dont vous avez besoin...

 
Zolotai:

Les amis, aidez-moi à démarrer. Vous devez ouvrir une commande.

Ça ne marche pas, qu'est-ce qui ne va pas ?

Ecrire un code qui va juste ouvrir une position. C'est tout ce dont vous avez besoin...


TakeProfit n'est pas spécifié correctement dans la soumission de l'ordre. Vous devez spécifier le prix, pas le nombre de nano-pips de profit. Corriger à Ask+TakeProfit*Point()
Ask, Bid ne doivent pas être normalisés....

OrderSend(

Symbol(),

OP_BUY,

StartLot,

Ask,

Slippage,

0,

Ask+TakeProfit*Point(),

WindowExpertName()+" "+(string)0,

0,

0,

clrBlue

);

Raison: