COMO conseguir um programador 100% interessado em escrever uma EA baseada em sua IDEA - página 11

 

Ou organizar um ajuste ajustável do take profit neste EA.

Aqui está o código completo.

 
//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
extern double lot=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int tiket=0;
//----
if (iVolume(NULL,0,0)==1){
    Print("WATR1="+iCustom( NULL, 0, "WATR", 0, 0) );
    Print("WATR2="+iCustom( NULL, 0, "WATR", 1, 0) );
    
    if (iCustom( NULL, 0, "WATR", 0, 2)<1000 && iCustom( NULL, 0, "WATR", 1, 1)<1000) {tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,iCustom( NULL, 0, "WATR", 1, 0),0,NULL,16384,0,Red);}
    if (iCustom( NULL, 0, "WATR", 1, 2)<1000 && iCustom( NULL, 0, "WATR", 0, 1)<1000) {tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3, iCustom( NULL, 0, "WATR", 0, 0),0,NULL,16384,0,Green);}
    CheckOrders();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
}
void CheckOrders(){
int pos=0;
int total=OrdersTotal();
for (pos=0;pos<total;pos++) {
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true){ 
if (OrderType()==OP_BUY && OrderStopLoss()<iCustom( NULL, 0, "WATR", 0, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 0, 1),OrderTakeProfit(),0,Green);
if (OrderType()==OP_SELL && OrderStopLoss()>iCustom( NULL, 0, "WATR", 1, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 1, 1),OrderTakeProfit(),0,Red);
                                                                                   }
                                                          }
                                      }
 
Ultramarin:

Ou organizar um ajuste ajustável do take profit neste EA.

Aqui está o código completo.

Você já tentou?
 
Registr:
Ultramarin:

Ou organizar um ajuste ajustável do take profit neste EA.

Aqui está o código completo.

Você já tentou trabalhar?
Se este for o código EA completo, então o Registrador lhe deu o melhor conselho.
 

Posso acrescentar algumas observações agora

1. o operador de retorno(0) pertencente à função de partida deve ser pelo menos duplicado abaixo de um parêntese encaracolado. Uma vez que só será executado se a condição para o volume de 1 for cumprida.

o resto do tempo, a função de partida deve fechar incorretamente.

as 2 condições do valor do chamado indicador <1000 é provavelmente a idéia de mostrar que na barra não há nenhum valor dos amortecedores

ou seja, uma espécie de cruzamento (mudança de cor do indicador e sua posição relativa em relação ao preço atual)

receio que neste caso funcione apenas para aqueles símbolos com o valor do preço atual superior a 1000 (por exemplo, PDR)

se o indicador desenha apenas uma cor na barra atual (o valor de outro tampão nesta barra é 0)

Caso contrário, em quase qualquer par de moedas, o valor atual do indicador será sempre inferior a 1000, e as condições serão acionadas em cada barra

3. recomendo que se tome a condição de um novo bar da seguinte maneira


int time;
 
int start
   {
      if (time!=Time[1])
         {
            // расчет индикатора и выполение действий с ордерами
            //-----
            //-----
            //-----
            //-----
            time=Time[1];
 
         }
       return(0);
   }



 
olyakish:

Posso acrescentar algumas observações agora

1. o operador de retorno(0) pertencente à função de partida deve ser pelo menos duplicado abaixo de um parêntese encaracolado. Uma vez que só será executado se a condição para o volume de 1 for cumprida.

o resto do tempo, a função de partida deve fechar incorretamente.

as 2 condições do valor do chamado indicador <1000 é provavelmente a idéia de mostrar que na barra não há nenhum valor dos amortecedores

ou seja, uma espécie de cruzamento (mudança de cor do indicador e sua posição relativa em relação ao preço atual)

receio que neste caso funcione apenas para aqueles símbolos com o valor do preço atual superior a 1000 (por exemplo, PDR)

se o indicador desenha apenas uma cor na barra atual (o valor de outro tampão nesta barra é 0)

Caso contrário, em quase qualquer par de moedas, o valor atual do indicador será sempre inferior a 1000, e as condições serão acionadas em cada barra

3. recomendo que se tome a condição de um novo bar da seguinte maneira


É melhor dizer-lhe quais as teclas a carregar... :)
 

Ah, e aqui está outra coisa.

4. Chamar o indicador personalizado 12 vezes é uma blasfêmia no mínimo :)

no seu caso, 6 vezes será suficiente (contei isso muitas vezes)

A velocidade de processamento de sua EA não crescerá duas vezes, mas 1,5 vezes na minha opinião. Estas ações somente (otimização de código), não devem ser confundidas com otimização de parâmetros


//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//|                                   обработал напильником olyakish |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
extern double lot=1;
extern string rem01="Профит в пунктах от текущей цены";
extern int TP=100;
 
int time;
double WATR[2,3];// первое измерение - индекс буфера; второе измерение - индекс бара 
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int tiket=0;
 
   if (Time[1]!=time)
      {
         WATR[0,0]=iCustom( NULL, 0, "WATR", 0, 0);
         WATR[1,0]=iCustom( NULL, 0, "WATR", 1, 0);
         WATR[0,1]=iCustom( NULL, 0, "WATR", 0, 1);
         WATR[1,1]=iCustom( NULL, 0, "WATR", 1, 1);
         WATR[0,2]=iCustom( NULL, 0, "WATR", 0, 2);
         WATR[1,2]=iCustom( NULL, 0, "WATR", 1, 2);         
         Print("WATR1=",WATR[0,0]);
         Print("WATR2=",WATR[1,0]);
    
         if (WATR[0,2]>0 && WATR[1,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3,WATR[0,0],Bid+TP*Point,NULL,16384,0,Green);
            }
         if (WATR[1,2]>0 && WATR[0,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,WATR[1,0],Ask-TP*Point,NULL,16384,0,Red);                           
            }
         CheckOrders();
         time=Time[1];
      }
   return(0);
  }
//+------------------------------------------------------------------+
void CheckOrders()
   {
      int pos=0;
      int total=OrdersTotal();
      for (pos=0;pos<total;pos++) 
         {
            if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
               { 
                  if (OrderType()==OP_BUY && OrderStopLoss()<WATR[0,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[0,1],OrderTakeProfit(),0,Green);}
                  if (OrderType()==OP_SELL && OrderStopLoss()>WATR[1,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[1,1],OrderTakeProfit(),0,Red);}
               }
         }
      return(0);  // на самом деле нужно просто return но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

Pelo menos assim

Verifique



 
Infelizmente, não funciona.
 

Alguém pode explicar

Há dois EAs idênticos com parâmetros absolutamente idênticos

Um compra ao mesmo tempo e outro vende ao mesmo tempo

Os momentos de entrada e saída são os mesmos

Como os dois desaparecem limpos?

 
Ultramarin:

Como ambos podem ser fundidos de forma limpa?

Sobre a propagação.
Razão: