Ho bisogno di aiuto con un codice - pagina 2

 
deVries:


A me sembra ancora che tu non sappia nulla di codifica

e non fai nulla per sapere qualcosa sulla codifica

Che tentativo hai fatto per realizzare questo?

Se vuoi aiuto mostra il tuo tentativo di farlo

Non c'è ancora nulla per aiutarvi con ...

Si. È totalmente nuovo per me. C'è un libro a cui può fare riferimento?
 
diamstar:
Si. È totalmente nuovo per me. C'è un libro a cui può fare riferimento?

Libro in un file
Scaricalo - 2 Mb
 
deVries:

Libro in un unico file
Scaricalo - 2 Mb
Grazie. Scriverò qualcosa dopo aver finito il libro, non importa quanto male.
 
diamstar :
30 minuti


Ecco qualcosa che può aiutarti a iniziare.

E su quell'antico cinese, a meno che tu non parli già cinese, attieniti a mql. È più facile, puoi ottenere più aiuto e se hai un'idea brillante, mql ti aiuterà a fare un sacco di soldi. È anche divertente.

Quindi eccoci qui:

 //+------------------------------------------------------------------+
//|                                               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);
  }
//+------------------------------------------------------------------+


Ho aggiunto alcuni bit e frammenti di codice per renderlo adatto al trading di notizie e all'inserimento manuale. Probabilmente si adatterà al tuo scopo.

Questo EA aveva originariamente lo scopo di scambiare le notizie in modo da inserire il giorno delle notizie del mese, l'ora e il minuto, prendere profitto in pip, Scadenza in minuti: quanti minuti dopo la notizia chiudere gli ordini in sospeso se la mossa non è avvenuta , BEPips - se un ordine viene attivato e devi passare al punto di pareggio, dopo quanti pip in profitto. Se Se trailing stop = 0 non ci sarà alcun trailing. Se imposti il trailing, imposta il numero di pip per tenerti lontano dal prezzo se in profitto.

Per il trading manuale, puoi lasciare il DayOfNews a zero in modo che EA scambi ogni giorno all'ora e al minuto specificati oppure puoi impostare manualmente il giorno ogni giorno in cui fai trading.

Inoltre devi impostare StopLoss sulla quantità di pip (non punti) che desideri.

Imposta SteDistance su qualsiasi distanza dal prezzo all'ora specificata in cui desideri gli ordini in sospeso (30 pip credo che tu abbia detto).

Imposta Scadenza in minuti su quanti minuti desideri che gli ordini siano attivi prima che EA li elimini se non vengono completati.

Ad ogni modo, dai un'occhiata al codice e se hai domande, postale qui o scrivimi in privato.

 
diamstar:
Grazie. Scriverò qualcosa dopo aver finito il libro, non importa quanto male.


Questo è lo spirito :)

Se ci provi, troverai persone che ti aiuteranno

 
diamstar:
Grazie. Scriverò qualcosa dopo aver finito il libro, non importa quanto male.


diamstar, imparare è divertente se si ottiene il giusto aiuto. Non cascarci e credi che se all'inizio sembra cinese antico non ne vale la pena.

Inoltre, non lasciatevi scoraggiare da coloro che non vogliono davvero aiutare. C'è molto aiuto disponibile, devi solo trovarlo.

Ecco un consiglio per voi se volete imparare:

1.Tieniti in contatto con persone che sono disposte a condividere (conoscenze, risorse, codice, ecc.). Avrai bisogno di loro

2. Leggi la documentazione e fai domande in modo da avere una buona comprensione di ciò che devi leggere. Non è necessario memorizzare tutto, solo sapere cosa è disponibile e dove trovarlo.

3. Non uccidetevi troppo cercando di scrivere ogni pezzo di codice da soli. È come reinventare la ruota.

4. Metti le mani su qualsiasi EA gratuito che puoi scaricare e analizza il codice. Capire come è strutturato, capire cosa fa ogni funzione e poi studiare come lo fa.

5. Utilizza il codice e le funzioni che funzionano e che ti piacciono nel tuo codice, puoi copiare il codice in qualsiasi editor di testo o come script in MetaEditor e salvarlo con un nome significativo per il futuro o semplicemente prendere nota di ciò che ti piace in quale EA in modo da poterlo trovare quando ne hai bisogno.

Spero sia d'aiuto.

Buona fortuna.

 
thrdel:


Ecco qualcosa che potrebbe aiutarti a iniziare.

E riguardo a quella cosa del cinese antico, a meno che tu non parli già il cinese, usa mql. È più facile, si può ottenere più aiuto con esso e se mai avete un'idea brillante, mql vi aiuterà a fare un sacco di soldi. È anche divertente.

Quindi eccoci qui:


Ho aggiunto alcuni pezzi di codice per renderlo adatto al trading di notizie e all'inserimento manuale. Probabilmente sarà adatto al tuo scopo.

Questo EA è stato originariamente destinato al commercio delle notizie in modo da inserire le notizie giorno del mese, ora e minuto, prendere profitto in pip, Scadenza in minuti - quanti minuti dopo la notizia per chiudere gli ordini in sospeso se il movimento non è accaduto, BEPips - se un ordine viene attivato e wast a muoversi per rompere anche, dopo quanti pip in profitto. Se Se trailing stop = 0 non ci sarà trailing. Se si imposta il trailing, impostare il numero di pip da tenere lontano dal prezzo se in profitto.

Per il trading manuale, puoi lasciare il DayOfNews a zero così l'EA farà trading ogni giorno all'ora e al minuto specificati o puoi impostare manualmente il giorno ogni giorno quando fai trading.

Inoltre devi impostare StopLoss alla quantità di pip (non punti) che desideri.

Imposta SteDistance a qualsiasi distanza dal prezzo all'ora specificata che desideri per gli ordini pendenti (30 pips, credo che tu abbia detto).

Imposta Expiration in minuti a quanti minuti vuoi che gli ordini siano attivi prima che l'EA li cancelli se non vengono eseguiti.

Comunque, dai un'occhiata al codice e se hai delle domande, postale qui o scrivimi.


Penso che l'OP sia un programmatore principiante. Dubito che capirà il vostro codice.

Saresti stato in grado di capire il tuo codice quando stavi iniziando ad imparare?

 
GumRai:


Penso che l'OP sia un programmatore principiante. Dubito che lui/lei possa capire il vostro codice.

Sareste stati in grado di capire il vostro codice quando stavate iniziando ad imparare?

Sono davvero grato. Proverò il codice e leggerò ancora il libro in modo da poterne capire ogni pezzo. Vi aggiornerò su qualsiasi problema che troverò. Grazie
 
GumRai:


Penso che l'OP sia un programmatore principiante. Dubito che lui/lei capirà il vostro codice.

Saresti stato in grado di capire il tuo codice quando stavi iniziando ad imparare?


Bene GumRay, il codice è lì, la documentazione per mql è disponibile, il codice ha alcune spiegazioni e noi siamo qui per aiutare. Come ho detto, " se hai delle domande, postale qui o mandami un pm".

Questo non significa che ho tutte le risposte, solo che sono disposto ad aiutare se diamstar è disposto ad imparare.

"Dubito che lui/lei capirà il tuo codice" per ora o non del tutto. Inoltre il codice potrebbe non essere al 100% quello che lui/lei sta cercando (ho fatto del mio meglio date le informazioni disponibili) ma è un buon inizio.

Sapete quanto sia più facile imparare con esempi pratici, vero?

Sono consapevole che ci sono così tante informazioni in quell'EA per un principiante e che ci potrebbero essere molte domande su di esso, ma è per questo che siamo qui, no?

Certo non sono stato in grado di capire tutto questo quando stavo imparando (sto ancora imparando) almeno non tutto la prima volta ma diamstar è riuscito a trovare il forum giusto per chiedere aiuto e sembra determinato ad imparare.

Auguriamogli il meglio e aiutiamolo se possiamo.

 
thrdel:


Bene GumRay, il codice è lì, la documentazione per mql è disponibile, il codice ha alcune spiegazioni e noi siamo qui per aiutare. Come ho detto, " se hai delle domande, postale qui o mandami un pm".

Questo non significa che ho tutte le risposte, solo che sono disposto ad aiutare se diamstar è disposto ad imparare.

"Dubito che lui/lei capirà il tuo codice" per ora o non del tutto. Inoltre il codice potrebbe non essere al 100% quello che lui/lei sta cercando (ho fatto del mio meglio date le informazioni disponibili) ma è un buon inizio.

Sapete quanto sia più facile imparare con esempi pratici, vero?

Sono consapevole che ci sono così tante informazioni in quell'EA per un principiante e che ci potrebbero essere molte domande su di esso, ma è per questo che siamo qui, no?

Certo non sono stato in grado di capire tutto questo quando stavo imparando (sto ancora imparando) almeno non tutto la prima volta ma diamstar è riuscito a trovare il forum giusto per chiedere aiuto e sembra determinato ad imparare.

Auguriamogli tutto il meglio e aiutiamolo se possiamo.

Apprezzo veramente tutta l'assistenza fornita. Non importa quanto sia complesso il codice, è un grande aiuto che potrei non aver trovato in mesi e i libri che sto leggendo rendono la comprensione relativamente facile. Si impara a leggere e capire b4 scrivere qualcosa di significativo.