Como codificar? - página 267

 
christinaLi:
Eu gostaria de ajudar com esta função de que você está falando, mas parece que não consigo simplesmente entender sua lógica. Isto realmente não tem nada a ver com outra lógica da estratégia.

Eu gostaria simplesmente de saber isto.

Se você tem 1 lote compra a 1,4110 e 2 lotes venda a 1,4200. A que preço você acha que tem 6 pips de ganho?

Oi, Christina,

na minha gestão de posição nunca, o 1 lote de compra fecha com lucro, antes que 2 lotes de venda sejam abertos (nunca vende porque o 1 lote de compra fechou com lucro, aguarde o próximo sinal)

de volta ao seu exemplo:

mas há uma linha a aproximadamente 1,4175, onde 2 lotes de venda (lucro acima, mercado abaixo) e 1 lote de compra (lucro abaixo, mercado abaixo) têm preço igual (breakeven 0), então a 1,4169 6 pips de lucro estão prontos - então eu fecharia todos os pedidos

IX

 
ixbone:
Olá Christina,

na minha gestão de posição nunca, o 1 lote de compra fecha com lucro, antes que 2 lotes de venda sejam abertos (nunca vende porque o 1 lote de compra fechou com lucro, aguarde o próximo sinal)

de volta ao seu exemplo:

mas há uma linha a aproximadamente 1,4175, onde 2 lotes de venda (lucro acima, mercado abaixo) e 1 lote de compra (lucro abaixo, mercado abaixo) têm preço igual (breakeven 0), então a 1,4169 6 pips de lucro estão prontos - então eu fecharia todos os pedidos

IX

Porque meu exemplo é 1.4110 e 1.4200. Aqui está meu cálculo:

Primeiro de tudo, em 1.4170(não considerando os spreads) estamos empatados. Agora temos 2 lotes de venda com ganho a 30 pips cada e 1 lote de compra com perda de 60 pips, portanto, estamos no break even em termos de dólar.

Se exatamente com meu exemplo, você deveria ter 6 pips de ganho geral a 1,4164.

A 1,4164 (não considerando spreads) temos 2 lotes de venda com ganho a 36 pips cada e 1 lote de compra com perda de 54 pips, portanto ganho de 72 pips de venda e perda de 54 pips de compra. No total para o grupo de negócios, você tem 3 lotes com um ganho de 18 pips. Portanto, é mais razoável considerar agora que você tem 6 pips de ganho.

No entanto, as coisas serão complicadas novamente por causa dos spreads. Porque se a oferta for 1,4164, pergunte talvez 1,4166, então suas vendas têm apenas 34 pips de ganho cada uma. No total para o grupo de negociações, você tem 3 lotes com um ganho de 14 pips. Portanto, agora de fato, você tem 4,7 pips de ganho.

Se eu levar este exemplo um passo adiante, se nós tivermos 2 compras e 3 vendas. Então, a 1,4164, você fica quites.

Se não tivermos que considerar os spreads, então precisamos de 30 pips de ganho total para ter 5 pips de ganho em cada lote. Então, o ganho de 6 pips seria ao preço de 1,4134, isto é correto?

O seu sistema provavelmente não terá este tipo de situação, é o princípio que eu quero obter. Você concorda com o cálculo acima?

 
christinaLi:
Porque meu exemplo é 1.4110 e 1.4200. Aqui está meu cálculo:

Antes de mais nada, com 1.4170(não considerando spreads) estamos no limiar de equilíbrio. Agora temos 2 lotes de venda com ganho a 30 pips cada e 1 lote de compra com perda de 60 pips, portanto, estamos no break even em termos de dólar.

Se exatamente com meu exemplo, você deveria ter 6 pips de ganho geral a 1,4164.

A 1,4164 (não considerando spreads) temos 2 lotes de venda com ganho a 36 pips cada e 1 lote de compra com perda de 54 pips, portanto ganho de 72 pips de venda e perda de 54 pips de compra. No total para o grupo de negócios, você tem 3 lotes com um ganho de 18 pips. Portanto, é mais razoável considerar agora que você tem 6 pips de ganho.

No entanto, as coisas serão complicadas novamente por causa dos spreads. Porque se a oferta for 1,4164, pergunte talvez 1,4166, então suas vendas têm apenas 34 pips de ganho cada uma. No total para o grupo de negociações, você tem 3 lotes com um ganho de 14 pips. Portanto, agora na verdade, você tem 4,7 pips de ganho.

Se eu levar este exemplo um passo adiante, se nós tivermos 2 compras e 3 vendas. Então, a 1,4164, você fica quites.

Se não tivermos que considerar os spreads, então precisamos de 30 pips de ganho total para ter 5 pips de ganho em cada lote. Então, o ganho de 6 pips seria ao preço de 1,4134, isto é correto?

O seu sistema provavelmente não terá este tipo de situação, é o princípio que eu quero obter. Você concorda com o cálculo acima?

Christina,

concordo, você está 100% certo com ambos os cálculos!

 

Oi, Michael,

Estou muito ocupado nos últimos dois dias, já fiz isso, mas preciso de mais tempo para montar. Publicá-lo-ei aqui assim que eu encontrar algum tempo para fazê-lo nos próximos dias. Chrisitna

 
 
christinaLi:
Oi, Michael, estou muito ocupado nos últimos dias, já fiz isso, mas preciso de mais tempo para montar. Publicarei aqui assim que eu encontrar algum tempo para fazê-lo nos próximos dias. Chrisitna

Oi Christina,

Não há problema, leve o tempo que precisar, eu sempre aprecio suas sugestões!

Michael

 
 

preciso de ajuda

Olá a todos!

Este é meu idea:i precisa de 2 buffers indicadores em janela_separada,1 é devupBuffer[];2 é devdwBuffer[]. Por exemplo, se tiver cinco digitais 1,2,3,4,5, a média é 3.Então os dados são maiores que a média de 3 4 e 5 devupBuffer={【(4-average)*(4-average)】+【(5-average)*(5-average)】}/Standard deviation(1,2,3,4,5)*Standard deviation(1,2,3,4,5).Os dados são menores que a média de 3 1 e 2 devdwBuffer={【(1-average)*(1-average)】+【(2-average)*(2-average)】}/desvio padrão(1,2,3,4,5)*Desvio padrão(1,2,3,4,5).

 

por que esta EA não pode comprar ou vender?

Olá, sou realmente novo nesta programação com Meta... Por favor, ajude...

Estou trabalhando com um sistema em Estocásticos com dois níveis, 25 e 75...

UM só comércio...

se o PRINCIPAL e o SIGNAL estiverem ambos abaixo de 25 e cruzamentos, COMPRAR.

se o PRINCIPAL e o SINAL forem ambos acima de 25, COMPRAR.

se o PRINCIPAL e SINAL estiverem ambos acima de 75 e cruzes, VENDA.

se as cruzes PRINCIPAL e SINAL (não é necessário estar abaixo de 75), VENDA FECHADO.

é isso...

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

//| StochCross.mq4 |

//| RobertEli |

//| http://www.metaquotes.net |

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

#property copyright "RobertEli"

#property link "http://www.metaquotes.net"

//--- input parameters

extern double TakeProfit=250.0;

extern double Lots=0.01;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Confirm (double line1, double line2, int level_buy, int level_sell)

{

static int confirmation = 0;

if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy

if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell

if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy

if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell

//if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY

//if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL

//else return (0);

return (confirmation);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 > line2) current_direction = 1; //UP

if (line1 < line2) current_direction = 2; //DOWN

if (current_direction != last_direction) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket;

double Stoch_main, Stoch_sign;

if (Bars < 100)

{

Print("BARS less than 100");

return (0);

}

if (TakeProfit < 10)

{

Print("TakeProfit less than 10");

return (0);

}

/*

Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0);

*/

Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0);

/*

Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);

Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);

*/

int isCrossed = Crossed(Stoch_main,Stoch_sign);

int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75);

int total = OrdersTotal();

if (total == 0)

{

if ((isCrossed == 1) && (isConfirmed == 1))

{

ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice());

else Print ("Error Opening BUY Order: ", GetLastError());

return (0);

}

}

if ((isCrossed == 2) && (isConfirmed == 2))

{

ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice());

else Print ("Error Opening SELL Order: ", GetLastError());

return (0);

}

}

return (0);

}

else

{

for (cnt = total; cnt < 0; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())

{

if (OrderType() == OP_BUY) //the trade was a Buy position

{ //check for closing)

if ((isCrossed == 2) && (isConfirmed == 3))

//if (isCrossed == 2)

{ //change of direction

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position

return (0);

}

}

else // the trade was a SELL position

{

//should it be closed?

//if ((isCrossed == 1) && (isConfirmed == 4))

if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it...

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed

return (0);

}

}

}

}

}

//----

return(0);

}

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

A EA não pode fazer o que deve fazer, HELP!

Olá, sou realmente novo nesta programação mq4, mas li os tutoriais dos codersgurus (muito obrigado!), então acho que posso entender algo... No entanto, eu fiz esta EA que é baseada em MUDANÇAS MÓVEIS... MAS NÃO PODE SER TERRIBILIZADO!

as regras aqui são muito simples...

1. MA_04_1H (significa período médio móvel 4 por 1 hora) cruza acima de MA_14_1H,

confirme com MA_04_4H acima de MA_14_4H (a tendência é para cima) ------> COMPRAR!

2. MA_04_1H cruza abaixo de MA_14_1H,

confirme com MA_04_4H abaixo de MA_14_4H (a tendência é para baixo)------> SELL!

3. Quando MA_04_1H cruzar com MA_14_1H, feche essa ordem (pode iniciar uma nova ordem dadas as regras #1 e #2)

4. Uma única profissão... (se COMPRAR, feche essa COMPRA. depois disso, VENDA se necessário)

Eu fiz 2 funções: Cruzado, e Confirmado.

Cruzado é para o período de 1 hora.

Confirmado é para o período de 4 horas.

alguém pode me ajudar a depurar esta coisa?

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

//| MACross1TradeOnly.mq4 |

//| RobertEli |

//| |

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

// this will work on MA_04, and MA__14

#property copyright "RobertEli"

#property link ""

extern double Lots = 0.01;

extern int stoploss_value = 10; // $10

bool up = 0, //UP direction, when MA_04 is above MA_14

down = 0, //DOWN direction, when MA_14 is above MA_04

change = 0, //when the MA_04 and MA_14 cross

firsttime = true; //first time for direction_prev

int direction_curr = 0; // 1 if UP, 2 if down...

int direction_prev = 0; // this will hold previous value of direction_curr

int direction_trend= 0; // trend direction for confirmation

int cross = 0; // if direction_curr and direction_prev changes course

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 - line2 > 0)//(line1 > line2)

{

current_direction = 1; //UP

if (firsttime == true)

{

current_direction = 0;

last_direction = 1;

firsttime = false;

return (0);

}

}

if (line1 - line2 < 0)//(line1 < line2)

{

current_direction = 2; //DOWN

if (firsttime == true)

{

current_direction = 0;

last_direction = 2;

firsttime = false;

return (0);

}

}

if ((current_direction != last_direction) && (firsttime == false)) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (last_direction);

}

}

int Confirmed (double line1, double line2)

{

int trend;

if (line1 > line2) trend = 1; // trend direction is UP

if (line1 < line2) trend = 2; // trend direction is DOWN

return (trend);

}

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

//| expert start function |

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

int start()

{

//----

int cnt,ticket, total;

//double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period

if (Bars < 100) { Print ("Bars less than 100."); return (0); }

double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0);

double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0);

//double stoploss = stoploss_value / (Lots * 100000);

//new code from v_1

cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN

direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN

total = OrdersTotal();

if (total == 0)

{

if((cross == 1) && (direction_trend == 1))

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice(),",<<<<",OrderStopLoss());

}

else Print("Error opening BUY order : ",GetLastError());

cross = 0;

return(0);

}

if((cross == 2) && (direction_trend == 2))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

cross = 0;

return(0);

}

}

if (total == 1)

{

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

// bool no_buy_sell = ((OrderTakeProfit() 0));

if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position

//OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red);

return (0);

}

else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position

//OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green);

return (0);

}

}

}

else return (0);

//----

return(0);

}

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

por favor, ignore aquele meu posto anterior... eu destruí essa idéia... estou trabalhando nisso agora... então por favor, ajude...