Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 509

 

Amigos, sugieran un robot. Uno que use a Martin.

Por ejemplo, abro una orden y el robot sigue trabajando...

 
Zolotai:

Amigos, díganme un robot. Uno que use a Martin.

Por ejemplo, abro una orden y el robot sigue trabajando...

Código base
 

Hola. Estoy tratando de entender cómo funcionan los eventos. NO me ha funcionado el evento de borrar un objeto del gráfico(CHARTEVENT_OBJECT_DELETE). Se elimina tanto con el ratón como a través de la Lista de Objetos. Construye 600.

Por favor, dígame qué pasa.

Utilizo el código de la ayuda

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


 

Estimados miembros del foro, ayúdenme a entender, i es la vela actual, por qué i-2 no quiere dibujar una línea, el probador se detiene cuando se ejecuta.

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

Estimados miembros del foro, ayúdenme a entender, i es la vela actual, por qué i-2 no quiere dibujar una línea, el probador se detiene cuando se ejecuta.


Si está intentando dibujar una línea 2 velas antes de la i, entonces necesita sumar 2, no restar, porque la numeración de las velas va de derecha a izquierda, barra 0-actual.
Si intentas dibujar líneas en una barra que aún no existe (-2), el índice del array no puede ser negativo. Para ello, calcula el tiempo de la barra necesaria, por ejemplo, Tiempo[0]+2*(Tiempo[0]-Tiempo[1])
 
isn-88:

Si está intentando dibujar una línea 2 velas por delante de la vela i-ésima, entonces necesita sumar 2, no restar, porque la numeración de las velas va de derecha a izquierda, barra 0-actual.
Si intentas dibujar líneas en una barra que aún no existe (-2), el índice del array no puede ser negativo. Para ello, tienes que calcular el tiempo de la barra que quieres, por ejemplo, Tiempo[0]+2*(Tiempo[0]-Tiempo[1])

Muchas gracias, la línea debería haberse dibujado en una barra que no existe (-2)
 
Alexandr24:

Muchas gracias, la línea debería haberse dibujado en una barra que no existe (-2)

Si no, ¿por qué habría un precio? Al fin y al cabo, el objeto se basa en el tiempo.
 
Alexandr24:

Muchas gracias, la línea debería haberse construido sobre una barra (-2) que no existe

Por favor,
He aquí otra "bella" solución

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

 

Amigos, ayúdenme a empezar. Necesito abrir un pedido.

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

);

}

}

No funciona, ¿qué pasa?

Escriba un código que sólo abra una posición. Eso es todo lo que necesitas...

 
Zolotai:

Amigos, ayúdenme a empezar. Necesito abrir un pedido.

No funciona, ¿qué pasa?

Escribe un código que sólo abra una posición. Esto es todo lo que necesitas...


El TakeProfit no se especifica correctamente en el envío de la orden. Debe especificar el precio, no el número de nano-pips de beneficio. Corregir a Ask+TakeProfit*Point()
Ask, Bid no necesita ser normalizado....

OrderSend(

Symbol(),

OP_BUY,

StartLot,

Ask,

Slippage,

0,

Ask+TakeProfit*Point(),

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

0,

0,

clrBlue

);

Razón de la queja: