Perguntas e respostas a programadores sobre MQL 4 - página 4

 

Até agora, exatamente assim:

//+------------------------------------------------------------------+

//| Fibo trading.mq4 |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#propriedade copyright "Minodi

#link da propriedade "minodi@yandex.ru"


período int externo_EMA = 233,

período_SMA = 233,

stoploss = 30,

Lote duplo externo = 0,01;

fio externo SesEnd ="22:00"; // hora limite para Hai ou Low

//+------------------------------------------------------------------+

//| função de início do programa de script |

//+------------------------------------------------------------------+

int start()

{

//------- Preços diários, fibras e tempo de renderização baixo--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

duplo HiPrice = iHigh(NULL,1440,shift); //High price

duplo LoPrice = iLow(NULL,1440,shift); // preço baixo

duplo OpPrice = iOpen (NULL,1440,shift); // preço aberto

duplo ClPrice = iClose (NULL,1440,turno); // Preço de fechamento

data/hora StTime = iTime(NULL,1440,shift); // ?

if(TimeDayOfWeek(StTime)==0/*Sunday*/)

{//Adicionar sextas-feiras altas e baixas

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1))

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose (NULL,1440,shift+1);

}

duplo Pivot =(HiPrice+LoPrice+ClPrice)/3;

faixa dupla =HiPrice-LoPrice;

duplo Fibo138 =1,382*Range+LoPrice;

duplo Fibo162 =1,618*Range+LoPrice;

duplo Fibo_138 =LoPrice-(1.382*Range-Range);

duplo Fibo_162 =LoPrice-(1.618*Range-Range-Range);

///---------------- HiTime e Low-----------------------------------------+

em HiTime,LoTime;

no tempo int; // no próximo rolo de barras os valores


if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}

if (High[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comentário ("Nesta barra: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currentDay, i=0; //

se (currDay!=TimeDay(Tempo[i]))

{

if (ClPrice<OpPrice) duplo x=(HiPrice + LoPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

i++;

}

duplo MaxDay = x - LoPrice; // faixa de preço Demark

duplo MinDay = x - HiPrice; // faixa de preço Demark

// -----------Скользящие средние---------------------------------------------+

duplo EMA = iMA(15,0,período_EMA,0,MODE_EMA, PRICE_CLOSE,0);

duplo SMA = iMA(15,0,período_SMA,0,MODE_SMA,PRICE_CLOSE,0);

duplo EMA1 = iMA(60,0,período_EMA,0,MODE_EMA,PRICE_CLOSE,0);

duplo SMA1 = iMA(60,0,período_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//----------------Удаление вчерашних ордеров---------------------------------+

//------------------Ордера----------------------------------------------------+

 

Caros membros do fórum, verifiquem o código, pretendo adicionar gradualmente

 

Estes são os parâmetros que eu lhe dei, coloque-os antes de começar


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения

 
Olá, caros programadores! Você pode aconselhar um novato a escrever, se possível, um roteiro (não um Expert Advisor) que coloque uma ordem comercial e, ao mesmo tempo, habilite a função Trailing Stop para ela a um nível mínimo? Talvez haja um já pronto, então se você puder me dar um link.
 
Vladon >>:

Вот эти параметры ято я давал, поместите перд стартом


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


Movido. O resto está tudo bem?
 

Caros membros do fórum, por favor, prestem atenção e digam-nos quais erros foram cometidos:

//+------------------------------------------------------------------+

//| Fibo trading.mq4 |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#propriedade copyright "Minodi

#link da propriedade "minodi@yandex.ru"


período int externo_EMA = 233,

período_SMA = 233,

stoploss = 30,

Magia = 55;

Lote duplo externo = 0,01;

fio externo SesEnd ="22:00"; // hora limite para Hai ou Low


em HiTime,LoTime;

no tempo int; // nos próximos valores de roll up da barra


//+------------------------------------------------------------------+

//| função de início do programa de script |

//+------------------------------------------------------------------+

int start()

{

//------- Preços diários, fibras e tempo de renderização baixo--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

duplo HiPrice = iHigh(NULL,1440,shift); // Hai price

duplo LoPrice = iLow(NULL,1440,shift); // preço baixo

duplo OpPrice = iOpen (NULL,1440,shift); // preço aberto

duplo ClPrice = iClose (NULL,1440,turno); // Preço de fechamento

data/hora StTime = iTime(NULL,1440,shift); // ?

if(TimeDayOfWeek(StTime)==0/*Sunday*/)

{//Adicionar sextas-feiras altas e baixas

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1))

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose (NULL,1440,shift+1);

}

duplo Pivot =(HiPrice+LoPrice+ClPrice)/3;

faixa dupla =HiPrice-LoPrice;

duplo Fibo138 =1,382*Arranque;

duplo Fibo162 =1,618*Arranque;

duplo Fibo_138 =(LoPrice-1.382*Range)-Range;

double Fibo_162 =(LoPrice-1.618*Range)-Range;

//---------------- time hai and low-----------------------------------------+


if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}

if (High[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comentário ("Nesta barra: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currentDay, i=0; //

se (currDay!=TimeDay(Tempo[i]))

{

if (ClPrice<OpPrice) duplo x=(HiPrice + LoPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

i++;

}

duplo MaxDay = x - LoPrice; // faixa de preço Demark

duplo MinDay = x - HiPrice; // faixa de preço Demark

// -----------Скользящие средние---------------------------------------------+

duplo EMA = iMA(15,0,período_EMA,0,MODE_EMA, PRICE_CLOSE,0);

duplo SMA = iMA(15,0,período_SMA,0,MODE_SMA,PRICE_CLOSE,0);

duplo EMA1 = iMA(60,0,período_EMA,0,MODE_EMA,PRICE_CLOSE,0);

duplo SMA1 = iMA(60,0,período_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//------------------Ордера----------------------------------------------------+

se (HiTime>LoTime){

int ticket1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket5 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket6 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);

}

se (HiTime<LoTime){

int ticket7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red);

int ticket11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (HiTime>LoTime && ClPrice>Pivot) {

int ticket13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket14=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,Fibo138,NULL,Magic,58000,Red);

}

se (HiTime<LoTime && ClPrice<Pivot)

int ticket15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red);

}

retorno(0);


//+------------------------------------------------------------------+


 

à primeira vista, os parâmetros:

na atuDaDa;


para começar

 
Esqueci as paradas, coloque-as a 30p
 
Aponte os erros, eu quero que o código funcione
 

Cavalheiros do fórum, ajudem a entender....

Aqui está uma parte do código (o código principal é extraído do manual de construção do Expert Advisor)

// Função de pedido
// Variáveis globais:
// Mas_Ord_New[31][9] // Conjunto de pedidos últimos conhecidos
// Mas_Ord_Old[31][9] // Conjunto de pedidos anteriores (antigos)
// 1º índice = número do pedido
// [][0] não está definido
// [][1] preço do pedido aberto (abs. de um pedido (taxa abc)
// [][2] StopLoss de um pedido (taxa abc)
// [][3] TakeProfit de um pedido (taxa abc)
// [][4] Número do pedido
// [][5] número de lotes de um pedido. (Abc Rate)
// [][6] Tipo de pedido 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] número mágico do pedido
// [][8] 0/1

if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])
Inform(1, Mas_Ord_Old[old][4]); // Então o pedido de compra foi fechado pelo sinal do contador
ou se (Mas_Ord_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Ord_Old[old][4],Mas_Ord_Old[old][2]) // significa que SL acionou
mais se (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]) // TA acionou

mais se (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3])
Inform(2, Mas_Ord_Old[old][4]); // Então a ordem de venda é fechada por sinal de contador
ou se (Mas_Ord_Ord_Old[old][6]===1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]) // significa que o SL acionou
mais se (Mas_Ord_Old[old][6]===1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // TA acionou

O resto não tem interesse...

O problema: Em 90% dos casos é mostrado o parâmetro correto, ou seja, se SL for acionado, o parâmetro é "19", se TP é "20", se a ordem é fechada manualmente, ou por um sinal de contador, o parâmetro é "1" ou "2". Foi projetado dessa forma.

Mas às vezes (com bastante freqüência) em vez de "20" ele retorna "19" (ou vice-versa), ou mesmo "1"("2"). Por favor, ajude-me a descrever corretamente a função "se": como condições de fechamento dos pedidos.

Eu acho que a razão pode estar no arredondamento dos preços?