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

 
Artemis é super!!!
 
Roman.:


1. Só por precaução - leia todas as informações em meus links do post 7 desta página.

2. Olhe para o trailer para um passeio de sua pergunta. O segundo arquivo é meu exemplo de trabalho com otimizador de estratégia e dependência, atualmente no gráfico - os valores de parada e lucro do TS-ka, obtidos como resultado da otimização a partir do Fator de Recuperação. Eu mesmo a estou usando recentemente - ainda estou estudando, portanto, todas as perguntas aos seus autores. Veja o site deles através da página.

3. Todos, IMHO.


Ooh, legal!!! Esse programa não é chamado Excel? Como você o usa, como economiza nele?
 

Sou um iniciante total nisso, mas por favor me ajude a escrever uma EA que funcione dessa maneira, primeiro basta abrir uma ordem de compra e colocar um take profit e stop loss, depois se essa ordem for fechada quando o take profit for acionado, então abre a mesma ordem de compra, e se fechada quando o stop loss for acionado, então abre a mesma ordem de venda
 
Como posso salvar os resultados em excelência? No testador eu cliquei em salvar tudo, encontrei e abri o Excel, cliquei a pasta sobre um fundo branco, nada aconteceu. Talvez meu irmão venha logo e me empurre para fora, por causa do computador.
 
dkfl.zrjdktdbx:
Como posso salvar os resultados em excelência? No testador eu cliquei em salvar tudo, encontrei e abri o Excel, cliquei a pasta sobre um fundo branco, nada aconteceu. Talvez meu irmão venha logo e me empurre para fora, por causa do computador.
Talvez eu devesse adquirir um segundo computador.
 
Algum dia...
 
dkfl.zrjdktdbx:
Como posso salvar os resultados em excelência? No testador eu cliquei em salvar tudo, encontrei e abri o Excel, cliquei a pasta sobre um fundo branco, nada aconteceu. Talvez meu irmão venha logo e me empurre para fora, por causa do computador.

Copiar tudo e colar, apenas o nome das colunas eu mesmo tenho que escrever, e a rentabilidade se traduz em meses para mim.
 
dkfl.zrjdktdbx:

Ooh, legal!!! Esse programa não é chamado Excel? Como utilizá-lo, como economizar nele?

Leia sua ajuda e a documentação MicrosoftOffice-excel... :-)
 

Camaradas, fiz recentemente uma pergunta sobre o fato de que a EA trabalha de forma diferente em uma conta real do que no testador de estratégia. Você disse que sem o código da EA em si não há maneira de descobri-lo. Aqui está o código:

Em resumo, a EA trabalha com base no princípio de Martingale, ou seja, abre com lote duplo se o comércio anterior não foi bem sucedido. Se estiver errado mais de 3 vezes, então assumo que um flat começou e muda os tamanhos dos lotes e pára, mas proporcionalmente como se a EA ainda estivesse abrindo na outra direção com o lote duplo.

Se tudo estava bem, abre-se na mesma direção com um lote. Então aqui está o problema: no Testador de Estratégia tudo está funcionando bem, mas na minha conta real já está abrindo a 2ª operação com lote 0,24 (este número está definido na função de troca)... Ajuda por favor ... Eu realmente quero tentar em uma conta real, o problema me mantém na conta demo =(

//+------------------------------------------------------------------+ 
//| StMartin++.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int ticket,total; 
    int slip = 3; 
    int Magic = 4; 


    static int CriticalTicket = 0; 

    int TicketArray[4]; //миссив с тикетами
    int CTicketArray[10]; //массив с критическими тикетами

    void FormTicket(int number) //объявил шаблон под функцию запоминания тикетов 
    { 
      for(int i=3;i>0;i--) 
      { 
         TicketArray[0] = ticket; 
         if(TicketArray[0]>0 && TicketArray[0] == TicketArray[1])break; 
         TicketArray[i] = TicketArray[i-1]; 
      } 
    } 
    
    void FormCriticalTicket(int number1) //сюда записываю критическме тикеты
    { 
      for(int i=9;i>0;i--) 
      { 
         CTicketArray[0] = CriticalTicket; 
         if(CTicketArray[0]>0 && CTicketArray[0] == CTicketArray[1])break; 
         CTicketArray[i] = CTicketArray[i-1]; 
      } 
    }  


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 
     if(OrdersHistoryTotal()==0) 
     { 
        ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
     } 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 
FormCriticalTicket(CriticalTicket); //вызываем функцию, что запоминала критические тикеты
int CritLot = crit(); //функция берет минимальное значение из массива критических тикетов
int OrderTimeCheck = check3(); //проверяем, закрыт ли ордер 
bool OrderCloseCheck = check2(OrderTimeCheck); //проверяем, закрылись ли ордера в минус 
FormTicket(ticket); //вызываем функцию, чтоб запоминала тикеты 
OrderOpenFunction(OrderCloseCheck,CritLot); //тут открываем ордера 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 


int crit()
{
   return(ArrayMinimum(CTicketArray,6,1));
}

int check3() //проверяем, закрыт ли ордер 
{ 
   OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
   if(OrderClosePrice()==OrderTakeProfit()) 
      { 
         CriticalTicket=0;
      } 
   if(OrderCloseTime()>0)return(100); 
} 

bool check2(int OrderTimeCheck) //проверяем, если ордер закрыт, то последние 3 закрытых ордера были ли убыточными? 
{ 
   if(OrderTimeCheck == 100) 
   { 
      bool flag = true; 
      for(int j=1;j<4;j++) 
      { 
         OrderSelect(TicketArray[j],SELECT_BY_TICKET); 
         if(OrdersHistoryTotal()>2) 
         { 
            if(OrderClosePrice()!=OrderStopLoss()) 
            { 
               flag = false; 
            } 
         } 
         if(OrdersHistoryTotal()<=2) 
         { 
            flag = false; 
         } 
      } 
      return(flag); 
   } 
   else
      return(false); 
} 

void OrderOpenFunction(bool OrderCloseCheck, int CritLot) 
{ 
   total = OrdersTotal();
   if(OrderCloseCheck==true)
   {
      int TP1,TS1;
      double m1,m2,m3,m4,m5,m6;
      m1=1.2;
      m2=1.25;
      m3=2.0;
      m4=1.0;
      m5=1.25;
      m6=1.0;
   
      OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
      switch(CritLot)
      {
         case 1: volumz = (OrderLots()*2)*m1;
                  TP1=TP/m1;
                  TS1=TS/m1; 
                  break;
         case 2: volumz = (OrderLots()*2)*m2/m1;
                  TP1=TP/m2;
                  TS1=TS/m2; 
                  break;
         case 3: volumz = (OrderLots()*2)*m3/m2;
                  TP1=TP/m3;
                  TS1=TS/m3; 
                  break;
         case 4: volumz = (OrderLots()*2)*m4/m3;
                  TP1=TP/m4;
                  TS1=TS/m4;
                  break;
         case 5: volumz = (OrderLots()*2)*m5/m4;
                  TP1=TP/m5;
                  TS1=TS/m5;
                  break;
         case 6: volumz = (OrderLots()*2)*m6/m5;
                  TP1=TP/m6;
                  TS1=TS/m6;
                  break;
      }

      if(total < 1) 
      { 
         if(OrderType()==OP_SELL) 
         { 
            double lot3 = volumz; 
            ticket = OrderSend(Symbol(),OP_BUY,lot3,Ask,slip,Bid-TS1*Point,Bid+TP1*Point,0,Magic,0,Green); 

            if(ticket>0) 
            { 
               CriticalTicket = ticket; 
            } 
         } 
         if(OrderType()==OP_BUY) 
         { 
            OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
            double lot4 = volumz; 
            ticket = OrderSend(Symbol(),OP_SELL,lot4,Bid,slip,Ask+TS1*Point,Ask-TP1*Point,0,Magic,0,Red); 

            if(ticket>0) 
            { 
               CriticalTicket = ticket; 
            } 
         } 
      } 
   }   
   if(OrderCloseCheck==false) 
   { 
      if(total < 1) 
      { 
         OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
         volumz = OrderLots(); 
         if(OrderClosePrice() == OrderStopLoss()) 
         { 
            if(OrderType() == OP_BUY) 
            { 
               double lot1 = volumz*2; 
               ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
            } 
            if(OrderType() == OP_SELL) 
            { 
               double lot2 = volumz*2; 
               ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
            } 
         } 
         if(OrderClosePrice() == OrderTakeProfit()) 
         { 
            if(OrderType() == OP_BUY) 
            { 
               ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
            } 
            if(OrderType() == OP_SELL) 
            { 
               ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
            } 
         } 
      } 
   } 
} 

todas as explicações estão lá... Se você precisar de mais - feliz em obrigar.

 
Olá a todos, Feliz Ano Novo. Não consigo encontrar nenhuma maneira de fazer um pedido apenas uma vez, se a condição for cumprida após a qual o pedido é feito, então se houver um pedido pela segunda vez ele não será feito. Se você puder dar um exemplo.
Razão: