Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 509

 

Pessoal, digam-me um robô. Um que usa martin.

Por exemplo, abro uma ordem e o robô continua trabalhando...

 
Zolotai:

Pessoal, digam-me um robô. Um que usa martin.

Por exemplo, abro uma ordem e o robô continua trabalhando...

Código Base
 

Olá. Estou tentando descobrir como funcionam os eventos. NÃO trabalhei o evento de apagar um objeto do gráfico(CHARTEVENT_OBJECT_DELETE). Removido tanto com o mouse quanto através da Lista de Objetos. Construir 600.

Por favor, diga-me o que está errado?

Eu uso código de ajuda

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


 

Caros membros do fórum, ajudem-me a entender, eu sou a vela atual, porque i-2 não quer traçar uma linha, o testador pára quando está correndo.

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

Caros membros do fórum, ajude-me a entender, eu sou a vela atual, porque i-2 não quer traçar uma linha, o testador pára quando está correndo.


Se você estiver tentando desenhar uma linha 2 velas antes do i, então você precisa adicionar 2, não subtrair, porque a numeração das velas vai da direita para a esquerda, barra 0-corrente.
Se você tentar traçar linhas em uma barra que ainda não existe (-2), o índice da matriz não pode ser negativo. Para isso, calcular o tempo da barra necessária, por exemplo, Tempo[0]+2*(Tempo[0]-Tempo[1])
 
isn-88:

Se você estiver tentando desenhar uma linha 2 velas à frente da i-ésima vela, então você precisa adicionar 2, não subtrair, porque a numeração das velas vai da direita para a esquerda, barra 0-corrente.
Se você tentar traçar linhas em uma barra que ainda não existe (-2), o índice da matriz não pode ser negativo. Para fazer isso, você precisa calcular o tempo da barra que deseja, por exemplo, Tempo[0]+2*(Tempo[0]-Tempo[1])

Muito obrigado, a linha deveria ter sido traçada em uma barra que não existe (-2)
 
Alexandr24:

Muito obrigado, a linha deveria ter sido traçada em uma barra que não existe (-2)

Por que outro motivo haveria um preço. Afinal de contas, o objeto é baseado no tempo.
 
Alexandr24:

Muito obrigado, a linha deveria ter sido construída sobre uma barra (-2) que não existe

Por favor
Aqui está outra "bela" solução

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

 

Pessoal, ajudem-me a começar. Necessidade de abrir um 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

);

}

}

Não está funcionando, o que está errado?

Escreva um código que apenas abrirá uma posição. Isso é tudo o que é preciso...

 
Zolotai:

Pessoal, ajudem-me a começar. Necessidade de abrir um pedido.

Não está funcionando, o que está errado?

Escreva um código que apenas abrirá uma posição. Isto é tudo o que você precisa...


TakeProfit não é especificado corretamente na apresentação do pedido. Você deve especificar o preço, não o número de nano-pips de lucro. Correto para Ask+TakeProfit*Point()
Ask, Bid não precisa ser normalizado

OrderSend(

Symbol(),

OP_BUY,

StartLot,

Ask,

Slippage,

0,

Ask+TakeProfit*Point(),

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

0,

0,

clrBlue

);

Razão: