Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 509

 

Gente, suggerite un robot, uno che usi Martin.

Per esempio, apro un ordine e il robot continua a lavorare...

 
Zolotai:

Gente, suggerite un robot, uno che usi Martin.

Per esempio, apro un ordine e il robot continua a lavorare...

Codice base
 

Salve. Sto cercando di capire come funzionano gli eventi. Non ho lavorato l'evento di eliminazione di un oggetto dal grafico(CHARTEVENT_OBJECT_DELETE). Rimosso sia con il mouse che attraverso la Lista degli oggetti. Costruire 600.

Per favore, ditemi cosa c'è che non va?

Uso il codice dell'aiuto

#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);
}
}


 

Cari membri del forum, aiutatemi a capire, i è la candela attuale, perché i-2 non vuole disegnare una linea, il tester si ferma quando si esegue.

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

Cari membri del forum, aiutatemi a capire, i è la candela attuale, perché i-2 non vuole disegnare una linea, il tester si ferma quando si esegue.


Se stai cercando di disegnare una linea 2 candele prima della i, allora devi aggiungere 2, non sottrarre, perché la numerazione delle candele va da destra a sinistra, 0-barra corrente.
Se cercate di disegnare delle linee su una barra che non esiste ancora (-2), l'indice della matrice non può essere negativo. Per farlo, calcolate il tempo della barra necessaria, ad esempio Time[0]+2*(Time[0]-Time[1])
 
isn-88:

Se stai cercando di disegnare una linea 2 candele avanti alla candela i-esima, allora devi aggiungere 2, non sottrarre, perché la numerazione delle candele va da destra a sinistra, 0-barra corrente.
Se cercate di disegnare delle linee su una barra che non esiste ancora (-2), l'indice della matrice non può essere negativo. Per farlo, dovete calcolare il tempo della barra che volete, per esempio Time[0]+2*(Time[0]-Time[1])

Grazie mille, la linea avrebbe dovuto essere disegnata su una barra che non esiste (-2)
 
Alexandr24:

Grazie mille, la linea avrebbe dovuto essere disegnata su una barra che non esiste (-2)

Perché altrimenti ci sarebbe un prezzo. Dopo tutto, l'oggetto è basato sul tempo.
 
Alexandr24:

Grazie mille, la linea avrebbe dovuto essere costruita su una barra (-2) che non esiste

Per favore
Ecco un'altra "bella" soluzione

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

 

Gente, aiutatemi a cominciare. Ho bisogno di aprire un ordine.

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

);

}

}

Non funziona, cosa c'è che non va?

Scrivere il codice che aprirà solo una posizione. Questo è tutto ciò di cui hai bisogno...

 
Zolotai:

Gente, aiutatemi a cominciare. Ho bisogno di aprire un ordine.

Non funziona, cosa c'è che non va?

Scrivere il codice che aprirà solo una posizione. Questo è tutto ciò di cui hai bisogno...


TakeProfit non è specificato correttamente nell'invio dell'ordine. Dovresti specificare il prezzo, non il numero di nano-pip di profitto. Correggere a Ask+TakeProfit*Point()
Ask, Bid non deve essere normalizzato....

OrderSend(

Symbol(),

OP_BUY,

StartLot,

Ask,

Slippage,

0,

Ask+TakeProfit*Point(),

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

0,

0,

clrBlue

);

Motivazione: