Eu preciso de ajuda com um código - página 2

 
deVries:


Para mim ainda está parecendo que você não sabe nada sobre codificação

e você não faz nada para saber algo sobre codificação

que tentativa você já fez para fazer isso ??

Se você quer ajuda para mostrar sua tentativa de fazer isto

Ainda não há nada para ajudá-lo com ...

Sim. É totalmente novo para mim. Existe algum livro que você possa me indicar?
 
diamstar:
Sim. É totalmente novo para mim. Existe algum livro que você possa me indicar?

Livro em um arquivo
Download - 2 Mb
 
deVries:

Livro em um arquivo
Download - 2 Mb
Obrigado. Vou escrever algo depois de terminar o livro, por pior que seja.
 
diamstar :
30 minutos


Aqui está algo que pode ajudar você a começar.

E sobre aquela coisa de chinês antigo, a menos que você já fale chinês fique com mql. É mais fácil, você pode obter mais ajuda com isso e se você tiver uma ideia brilhante, o mql vai ajudá-lo a ganhar muito dinheiro. Também é divertido.

Aqui vamos nos :

 //+------------------------------------------------------------------+
//|                                               News_Trader_v1.mq4 |
//|                                            Copyright © 2013 _3DE |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013 _3DE"
#property link        "https://www.metaquotes.net"
extern string   Note1       = "Set parameters in Pips not points !" ;
extern string   Note2       = "Set day of the month for the news !" ;
extern string   Note3       = "Set to zero to trade every day    !" ;
extern string   Note4       = "Leave SetDistance to zero if trading news !" ;
extern int      TakeProfit  = 25 ; // Take profit pips
extern int      StopLoss    = 20 ; // Stop loss pips (manual trading)
extern int      SetDistance = 0 ; // Sistance for BuyStop and SellStop from price at news time
extern int      DayOfNews   = 0 ; // Day of the month of news
extern int      NewsHour    = 0 ; // Hour of news
extern int      NewsMin     = 0 ; // Minute of news
extern int      Expiration  = 5 ; // Expiration of pending orderes
extern int      BEPips      = 11 ; // Move to break even after BEPips
extern int      TrailingStop= 0 ; // What distance to keep trailing
extern int      Slip        = 5 ; // Slippage
extern int      MagicNumber= 2210 ; // Must be unique for every chart
extern double   Lots        = 0.1 ;
extern bool     WriteLog= false ; // Write a log file 
extern string   TradeLog    = "MI_Log" ;
input    string   EaComment   = "NewsTrader_EA" ;

double h,l,ho,lo,hso,lso,htp,ltp,sp,price;

string filename;
int pointMultiply= 10 ;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   if ( Digits == 3 || Digits == 5 )
     {
      pointMultiply  *= 10 ;
      TakeProfit     *= 10 ;
      StopLoss       *= 10 ;
      BEPips         *= 10 ;
      TrailingStop   *= 10 ;
      SetDistance    *= 10 ;
     }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int i;
   int OrdersCondition,minofday,minofnews;

   filename= Symbol ()+TradeLog+ "-" + Month ()+ "-" + Day ()+ ".txt" ;

   if (BEPips> 0 ) DoBE(BEPips);

   if (TrailingStop> 0 ) DoTrail();

   OrdersCondition=CheckOrdersCondition();
   if ( Day ()==DayOfNews || DayOfNews== 0 )
     {
      minofday= Hour ()* 60 + Minute ();
      minofnews=NewsHour* 60 +NewsMin;

       if ((minofday==minofnews- 2 ) || (minofday==minofnews- 1 ))
        {
         h= iHigh ( NULL , PERIOD_M1 , 0 );
         l= iLow ( NULL , PERIOD_M1 , 0 );
         for (i= 1 ;i<= 3 ;i++) if ( iHigh ( NULL , PERIOD_M1 ,i)>h) h= iHigh ( NULL , PERIOD_M1 ,i);
         for (i= 1 ;i<= 3 ;i++) if ( iLow ( NULL , PERIOD_M1 ,i)<l) l= iLow ( NULL , PERIOD_M1 ,i);
         sp= Ask - Bid ;
         ho=h+sp+(pointMultiply)* Point ;
         lo=l-(pointMultiply)* Point ;
         hso=h+sp;
         lso=l;
         htp=ho+TakeProfit* Point -sp;
         ltp=lo-TakeProfit* Point +sp;
         //---
         ho= NormalizeDouble (ho, Digits );
         lo= NormalizeDouble (lo, Digits );
         hso= NormalizeDouble (hso, Digits );
         lso= NormalizeDouble (lso, Digits );
         htp= NormalizeDouble (htp, Digits );
         ltp= NormalizeDouble (ltp, Digits );
         if (SetDistance!= 0 )
           {
            price=( Ask + Bid )/ 2 ;
            h=price+SetDistance* Point ;
            l=price-SetDistance* Point ;
            ho= NormalizeDouble (h+sp, Digits );
            lo= NormalizeDouble (l-sp, Digits );
            hso= NormalizeDouble (ho-StopLoss* Point , Digits );
            htp= NormalizeDouble (ho+TakeProfit* Point , Digits );
            lso= NormalizeDouble (lo+StopLoss* Point , Digits );
            ltp= NormalizeDouble (lo-TakeProfit* Point , Digits );
           }
         if (OrdersCondition== 0 )
           {
             if (WriteLog)Write( "Opening BuyStop & SellStop, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenBuyStop();
            OpenSellStop();
           }

         if (OrdersCondition== 10 )
           {
             if (WriteLog)Write( "Opening SellStop, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenSellStop();
           }

         if (OrdersCondition== 1 )
           {
             if (WriteLog)Write( "Opening BuyStop , OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenBuyStop();
           }
        }
     }
   if ((minofday>=minofnews) && (minofday<=minofnews+Expiration- 1 ))
     {

       if (OrdersCondition== 1001 )
        {
         if (WriteLog)Write( "Deleting SellStop Because of BuyStop Hit, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteSellStop();
        }

       if (OrdersCondition== 110 )
        {
         if (WriteLog)Write( "Deleting BuyStop Because of SellStop Hit, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
        }
     }

   if (minofday>=minofnews+Expiration)
     {
       if (OrdersCondition== 11 )
        {
         if (WriteLog)Write( "Deleting BuyStop and SellStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
         DeleteSellStop();
        }

       if ((OrdersCondition== 10 ) || (OrdersCondition== 110 ))
        {
         if (WriteLog)Write( "Deleting BuyStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
        }

       if ((OrdersCondition== 1 ) || (OrdersCondition== 1001 ))
        {
         if (WriteLog)Write( "Deleting SellStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteSellStop();
        }
     }

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| int CheckOrdersCondition()                                       |
//+------------------------------------------------------------------+

int CheckOrdersCondition()
  {
   int result= 0 ;
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if (( OrderType ()== OP_BUY ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 1000 ;
        }
       if (( OrderType ()== OP_SELL ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 100 ;
        }
       if (( OrderType ()== OP_BUYSTOP ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 10 ;
        }
       if (( OrderType ()== OP_SELLSTOP ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 1 ;
        }

     }
   return (result); // 0 means we have no trades
  }
// OrdersCondition Result Pattern
//    1    1    1    1
//    b    s    bs   ss
//  
//+------------------------------------------------------------------+
//|void OpenBuyStop()                                                |
//+------------------------------------------------------------------+

void OpenBuyStop()
  {
   int ticket,tries;
   tries= 0 ;
   if (! GlobalVariableCheck ( "InTrade" ))
     {
       while (tries< 3 )
        {
         GlobalVariableSet ( "InTrade" , TimeCurrent ());   // set lock indicator
         ticket= OrderSend ( Symbol (), OP_BUYSTOP ,Lots,ho,Slip,hso,htp,EaComment,MagicNumber, 0 ,Red);
         if (WriteLog)Write( "in function OpenBuyStop OrderSend Executed , ticket =" +ticket);
         GlobalVariableDel ( "InTrade" );   // clear lock indicator
         if (ticket<= 0 )
           {
            tries++;
           }
         else tries= 3 ;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenSellStop()
  {
   int ticket,tries;
   tries= 0 ;
   if (! GlobalVariableCheck ( "InTrade" ))
     {
       while (tries< 3 )
        {
         GlobalVariableSet ( "InTrade" , CurTime ());   // set lock indicator
         ticket= OrderSend ( Symbol (), OP_SELLSTOP ,Lots,lo,Slip,lso,ltp,EaComment,MagicNumber, 0 ,Red);
         if (WriteLog)Write( "in function OpenSellStop OrderSend Executed , ticket =" +ticket);
         GlobalVariableDel ( "InTrade" );   // clear lock indicator
         if (ticket<= 0 )
           {
            tries++;
           }
         else tries= 3 ;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DoBE( int byPips)
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber)) // only look if mygrid and symbol...
        {
         if ( OrderType ()== OP_BUY ) if ( Bid - OrderOpenPrice ()>byPips* Point ) if ( OrderStopLoss ()< OrderOpenPrice ())
           {
             if (WriteLog)Write( "Movine StopLoss of Buy Order to BE+1" );
             OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()+ Point , OrderTakeProfit (),Red);
           }
         if ( OrderType ()== OP_SELL ) if ( OrderOpenPrice ()- Ask >byPips* Point ) if ( OrderStopLoss ()> OrderOpenPrice ())
           {
             if (WriteLog)Write( "Movine StopLoss of Buy Order to BE+1" );
             OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()- Point , OrderTakeProfit (),Red);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DoTrail()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber)) // only look if mygrid and symbol...
        {

         if ( OrderType ()== OP_BUY )
           {
             if ( Bid - OrderOpenPrice ()> Point *TrailingStop)
              {
               if ( OrderStopLoss ()< Bid - Point *TrailingStop)
                 {
                   OrderModify ( OrderTicket (), OrderOpenPrice (), Bid - Point *TrailingStop, OrderTakeProfit (), 0 ,Green);
                   return ;
                 }
              }
           }

         if ( OrderType ()== OP_SELL )
           {
             if (( OrderOpenPrice ()- Ask )>( Point *TrailingStop))
              {
               if (( OrderStopLoss ()>( Ask + Point *TrailingStop)) || ( OrderStopLoss ()== 0 ))
                 {
                   OrderModify ( OrderTicket (), OrderOpenPrice (), Ask + Point *TrailingStop, OrderTakeProfit (), 0 ,Red);
                   return ;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteBuyStop()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber) && ( OrderType ()== OP_BUYSTOP ))
        {
         OrderDelete ( OrderTicket ());
         if (WriteLog)Write( "in function DeleteBuyStopOrderDelete Executed" );
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteSellStop()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber) && ( OrderType ()== OP_SELLSTOP ))
        {
         OrderDelete ( OrderTicket ());
         if (WriteLog)Write( "in function DeleteSellStopOrderDelete Executed" );
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Write( string str)
  {
   int handle;

   handle= FileOpen (filename, FILE_READ | FILE_WRITE | FILE_CSV , "/t" );
   FileSeek (handle, 0 , SEEK_END );
   FileWrite(handle,str+ " Time " + TimeToStr ( CurTime (), TIME_DATE | TIME_SECONDS ));
   FileClose (handle);
  }
//+------------------------------------------------------------------+


Eu adicionei alguns bits e pedaços de código para torná-lo adequado para negociação de notícias e entrada manual. Provavelmente irá atender ao seu propósito.

Este EA foi originalmente destinado a negociar as notícias para que você insira o dia da notícia do mês, hora e minuto, obtenha lucro em pips, Expiração em minuto - quantos minutos após a notícia para fechar as ordens pendentes se o movimento não aconteceu , BEPips - se um pedido for acionado e for necessário mover-se para atingir o ponto de equilíbrio, após quantos pips de lucro. Se If trailing stop = 0, não haverá trailing. Se você definir o trailing, defina o número de pips para ficar longe do preço se estiver com lucro.

Para negociação manual, você pode deixar o DayOfNews em zero para que a EA negocie todos os dias na hora e minuto especificados ou você pode definir manualmente o dia todos os dias ao negociar.

Além disso, você precisa definir StopLoss para a quantidade de pips (não pontos) que deseja.

Defina o SteDistance para qualquer distância do preço no momento especificado em que você deseja as ordens pendentes (30 pips, acredito que você disse).

Defina Expiração em minutos para quantos minutos você deseja que os pedidos estejam ativos antes que a EA os exclua se não forem preenchidos.

De qualquer forma, dê uma olhada no código e se tiver alguma dúvida, poste aqui ou me mande uma mensagem.

 
diamstar:
Obrigado. Vou escrever algo depois de terminar o livro, por pior que seja.


Esse é o espírito :)

Se você tentar, você encontrará pessoas que o ajudarão

 
diamstar:
Obrigado. Vou escrever algo depois de terminar o livro, por pior que seja.


diamstar, aprender é divertido se você receber a ajuda certa . Não caia nessa e acredite que se a princípio parece com chinês antigo, não vale a pena.

Além disso, não se deixe desencorajar por aqueles que não querem realmente ajudar. Há muita ajuda disponível, você só precisa encontrá-la.

Ela é um conselho para você se você quiser aprender :

1. mantenha contato com pessoas que estão dispostas a compartilhar (conhecimento, recursos, código, etc.). Você vai precisar delas

2. Leia a documentação e faça perguntas para que você tenha uma boa compreensão do que deve ler. Você não precisa memorizar tudo, só para saber o que está disponível e onde encontrá-lo.

3. não se mate demais tentando escrever cada pedaço de código você mesmo. É como reinventar a roda.

4. ponha suas mãos em qualquer EA grátis que você possa baixar e passe pelo código. Entenda como está estruturado, entenda o que cada função faz e depois estude como o faz.

5. Use o código e as funções que funcionam e você gosta em seu código, você pode copiar o código em qualquer editor de texto ou como scripts no MetaEditor e salvá-lo com um nome significativo para o futuro ou apenas fazer anotações do que você gosta em que EA para que você possa encontrá-lo quando precisar dele.

Espero que a EA ajude.

Boa sorte.

 
thrdel:


Aqui está algo que pode ajudá-lo a começar.

E a respeito daquela coisa chinesa antiga, a menos que você já fale chinês com mql. É mais fácil, você pode obter mais ajuda com ele e se alguma vez tiver uma idéia brilhante, o mql vai ajudar você a ganhar uma tonelada de dinheiro. Também é divertido.

Portanto, aqui vamos nós:


Acrescentei alguns pedaços de código para torná-lo adequado para o comércio de notícias e entrada manual. Provavelmente, ele se adequará ao seu propósito .

Esta EA foi originalmente destinada a negociar as notícias para que você introduzisse o dia das notícias do mês, hora e minuto, lucrasse em pips, Expiração em minuto - quantos minutos após as notícias para fechar as ordens pendentes se a mudança não acontecesse, BEPips - se uma ordem fosse acionada e não se movesse para se igualar, após quantos pips de lucro. Se a parada de rastreamento = 0, não haverá rastreamento. Se você definir o trailing stop, defina o número de pips para se manter afastado do preço, caso tenha lucro.

Para negociação manual, você pode deixar a DayOfNews a zero para que a EA negocie todos os dias na hora e minuto especificados ou você pode definir manualmente o dia todos os dias quando você negociar.

Também é necessário definir o StopLoss para a quantidade de pips (não pontos) que você deseja.

Defina a SteDistance para qualquer distância do preço na hora especificada que você desejar as ordens pendentes (30 pips, creio que você disse).

Defina Expiração em minutos para quantos minutos você deseja que as ordens estejam ativas antes que a EA as apague se não forem preenchidas.

De qualquer forma, dê uma olhada no código e, se tiver alguma dúvida, coloque-a aqui ou me envie uma mensagem.


Eu acho que o OP é um programador novato. Duvido que ele entenda seu código.

Você teria sido capaz de entender seu código quando você estava começando a aprender?

 
GumRai:


Eu acho que o OP é um programador novato. Duvido que ele/ela entenda seu código.

Você teria sido capaz de entender seu código quando você estava começando a aprender?

Estou muito grato. Vou experimentar o código e ainda ler o livro para que eu possa entender cada pedaço dele. Eu o atualizarei sobre qualquer assunto que eu encontrar. Obrigado
 
GumRai:


Eu acho que o OP é um programador novato. Duvido que ele/ela entenda seu código.

Você teria sido capaz de entender seu código quando você estava começando a aprender?


Bem GumRay, o código está lá, a documentação para mql está disponível, o código tem algumas explicações e nós estamos aqui para ajudar. Como eu disse, " se você tiver alguma dúvida, coloque-a aqui ou me envie uma mensagem".

Isso não significa que eu tenha todas as respostas, apenas que estou disposto a ajudar se a diamstar estiver disposta a aprender.

"Duvido que ele/ela entenda seu código" por enquanto ou não inteiramente. Também o código pode não ser 100% o que ele/ela está procurando (eu tentei ao máximo dadas as informações disponíveis), mas é um bom começo.

Você sabe como é muito mais fácil aprender com exemplos práticos, certo?

Estou ciente de que há tanta informação naquela EA para um novato e que pode haver muitas perguntas sobre isso, mas é por isso que estamos aqui, não é mesmo?

Claro que não consegui entender tudo isso quando estava aprendendo (ainda estou aprendendo) pelo menos não tudo da primeira vez, mas a diamstar conseguiu encontrar o fórum certo para pedir ajuda e parece determinada a aprender .

Vamos desejar a ele o melhor e ajudar se pudermos.

 
thrdel:


Bem GumRay, o código está lá, a documentação para mql está disponível, o código tem algumas explicações e nós estamos aqui para ajudar. Como eu disse, " se você tiver alguma dúvida, coloque-a aqui ou me envie uma mensagem".

Isso não significa que eu tenha todas as respostas, apenas que estou disposto a ajudar se a diamstar estiver disposta a aprender.

"Duvido que ele/ela entenda seu código", por enquanto ou não inteiramente. Também o código pode não ser 100% o que ele/ela está procurando (eu tentei ao máximo dadas as informações disponíveis), mas é um bom começo.

Você sabe como é muito mais fácil aprender com exemplos práticos, certo?

Estou ciente de que há tanta informação naquela EA para um novato e que pode haver muitas perguntas sobre isso, mas é por isso que estamos aqui, não é mesmo?

Claro que não consegui entender tudo isso quando estava aprendendo (ainda estou aprendendo) pelo menos não tudo da primeira vez, mas a diamstar conseguiu encontrar o fórum certo para pedir ajuda e parece determinada a aprender .

Vamos desejar a ele o melhor e ajudar se pudermos.

Eu realmente aprecio toda a assistência prestada. Não importa quão complexo seja o código d, é uma grande ajuda que talvez eu não tenha conseguido encontrar em meses e os livros que estou lendo tornam a compreensão relativamente fácil. U aprender a ler e entender b4 escrever algo significativo.