[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 243

 
costy_ >> :

Deve ir para comprar quando a abertura for maior que ma1.

Entendo que "tumblr" em ||| como eu não sei como denotar por exemplo "se" (ma1>ma2&ma1>Open[1] "ou" ma1>ma3&&ma1>Open[1]) "então" Open BAY();


Você pode ver pelo gráfico que nem todas as condições são cumpridas!!!


Experimentei outras compras em uma vela 53.


Que outra maneira de implementar a lógica?


Há apenas um enorme número de erros em seu pedaço de código.

Descrevendo-as todas e explicando porque é assim e não de outra forma.... Eu não tenho muito tempo.

A única coisa que vou corrigir por enquanto:

if (( ma1> ma2 && ma1> ma3 && Open[1]> ma1) || 
    ( ma2> ma1 && ma2> ma3 && Open[1]> ma1) ||
    ( ma3> ma1 && ma3> ma2 && Open[1]> ma1)
  )
  OpenBuy();
Talvez eu lhe dê mais dicas quando eu tiver tempo ....



 
Obrigado. Entendi.
if (( ma1> ma2 && ma1> ma3  && Open[1]> ma1) || 
    ( ma2> ma1 && ma2> ma3  && Open[1]> ma1) ||
    ( ma3> ma1 && ma3> ma2  && Open[1]> ma1)
   )
    OpenBuy();

mas eu tenho que fazê-lo.

if ( ma1> ma2 && ma1> ma3 && Open[1]> ma1)
OpenBuy();
if ( ma2> ma1 && ma2> ma3 && Open[1]> ma1)
OpenBuy();
if ( ma3> ma1 && ma3> ma2 && Open[1]> ma1)
OpenBuy();
 
costy_ >> :

>> e eu tenho que

A mesma coisa, apenas a primeira opção é mais curta.

 
MrSoros >> :

A mesma coisa, apenas a primeira opção é mais curta.

Infelizmente a primeira opção não funcionou corretamente no gráfico (é tudo esquisito).

Primeiro, é claro, mais bonito e a lógica é assim, é tipo de primeira adição e depois multiplicação. =))

 
MrSoros >> :

Os sinais estão todos bem.

A idéia em si (fechamento da CCI), do meu ponto de vista - não ahchy....

Eu já passei por isso antes...

Mas já é uma questão de estratégia.

>> como muitos comerciantes, como muitas estratégias.


Não, não é assim que o algoritmo funciona, agora ele fecha na CCI se o lucro for superior a 10pp, e eu preciso exatamente do nível de lucro de 10pp somente lá que fecharia na klose, se o lucro for superior a 10pp então ele não deve fechar na CCI. Neste momento fecha na CCI se o valor de lucro for superior a 10pp (

O próprio significado do algoritmo nesta função é diferente, há um nível de lucro de 10pp - que é um lucro virtual, fixado pela cláusula na direção do indicador SSI. Quando o preço vai em lucro ele sempre passa este nível como SSI parece certo, então tendo passado este nível o preço às vezes dá um movimento inverso de volta ao estado inicial, ou mudança de direção da tendência, - neste caso SSI sempre olha na outra direção, e quando passa na direção oposta a 10pp um pedido é fixado como SSI olhará na direção oposta.

  if (OrderType() == OP_BUY && cci_0< cci_1 && Bid-OrderOpenPrice() >= Point* profit) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
  if (OrderType() == OP_SELL && cci_0> cci_1 && OrderOpenPrice() - Ask >= Point* profit) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);

  

  cci_0< cci_1 && Bid-OrderOpenPrice() == Point* profit // может вот так? - так вообще не работает(
 

Olá.

Veja se o tamanho do lote é calculado corretamente como uma porcentagem do saldo:

//расчёт размера лота
double Lots()
   {
   double ls=MarketInfo(Symbol(),MODE_MINLOT)+MarketInfo(Symbol(),MODE_LOTSTEP)*MathFloor(( procentdepo*AccountBalance()/100000-MarketInfo(Symbol(),MODE_MINLOT))/MarketInfo(Symbol(),MODE_LOTSTEP));
     if( ls>MarketInfo(Symbol(),MODE_MAXLOT))   { ls=MarketInfo(Symbol(),MODE_MAXLOT); }
     if( ls<MarketInfo(Symbol(),MODE_MINLOT))   { ls=MarketInfo(Symbol(),MODE_MINLOT); }
   return( ls);
   }

onde procentdepo é % do depósito

 
Piboli >> :

Olá.

Veja se o tamanho do lote é calculado corretamente como uma porcentagem do saldo:

onde o procentdepo é % do depósito.

Faça isso.

extern double PercentLots  = 0.5;// внешние переменные


//то что ниже закиньте в конец кода
double GetLots() 
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);

if( PercentLots!=0)
 {
   double lot = NormalizeDouble(AccountBalance() * PercentLots  /1000.0 / 100.0, 2);
   if( lot < minlot) lot = minlot;
   if( lot > maxlot) lot = maxlot;
  }
  else lot= Lots; 
  return( lot);
  }  

//GetLots() - вставьте в ticket=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,3,stop,Ask+Takeprofit*Point,"",MagicNumber,0,Green);
 
Piboli >> :

Olá.

Verifique se o tamanho do lote é calculado corretamente como uma porcentagem do saldo:

onde procentdepo é % do depósito

Melhor ainda, use esta função de otimização do lote, aqui funciona MM se houver negócios não lucrativos, então o lote será reduzido para o lote inicial.

//внешние переменные
extern double Lots = 0.1;          //стартовый лот до баланса 500
extern double MaximumRisk = 0.1;   //увеличение лота на каждые 500 баланса
extern double DecreaseFactor = 3.0;//уменьшение лота при серии убыточных позиций


//то что ниже  закиньте перед стартом
double LotsOptimized() {
       double lot = Lots;
       int orders = OrdersHistoryTotal();
       int losses = 0;
       lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 500.0, 2);
       if ( DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
       if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
       Print("Error in history!");
       break;
       }
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) losses++;
}
if ( losses > 1) lot = NormalizeDouble( lot - lot * losses / DecreaseFactor, 2);
}
if ( lot < 0.1) lot = 0.1;
if ( lot > 1000.0) lot = 1000;
return ( lot);}

int start(){//старт

LotsOptimized() -- вставьте в ticket=OrderSend(Symbol(),OP_BUY, LotsOptimized(),Ask,3, stop,Ask+ Takeprofit*Point,"", MagicNumber,0,Green);
 
Somente os dois postos anteriores não levam em conta a mudança de etapa do lote. Infelizmente.
 
Vinin >> :
Somente os dois postos anteriores não levam em conta a etapa de mudança de lote. >> Infelizmente.

Posso fazer, se entendi bem o passo, quanto do saldo será adicionado ao lote?

Ou você pretende ter uma curva constante de aumento de lote, mas não vejo a utilidade de tal progressão.

extern double balans = 500; //шаг баланса

lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 1);