Мне нужна помощь с кодом - страница 2

 
deVries:


Для меня это все еще выглядит так, что вы ничего не знаете о кодинге

и ничего не делаете, чтобы узнать что-то о кодинге.

какие попытки вы предприняли, чтобы сделать это?

Если вы хотите помощи, покажите свою попытку сделать это.

Вам все еще нечем помочь...

Да. Это совершенно новое для меня занятие. Есть ли книга, к которой вы можете меня направить?
 
diamstar:
Да. Это совершенно новое для меня. Есть ли книга, на которую вы можете меня направить?

Книга в одном файле
Скачать - 2 Мб
 
deVries:

Книга в одном файле
Скачать - 2 Мб
Спасибо. Я напишу что-нибудь после завершения книги, неважно, насколько она плоха.
 
diamstar :
30 минут


Вот что может помочь вам начать.

А насчет этой древней китайской штуки, если вы уже не говорите по-китайски палку с mql. Это проще, вы можете получить дополнительную помощь, и если у вас когда-нибудь появится блестящая идея, mql поможет вам заработать кучу денег. Это также весело.

Итак, приступим:

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


Я добавил несколько фрагментов кода, чтобы сделать его пригодным для торговли на новостях и ручного ввода. Это, вероятно, подойдет для вашей цели.

Этот советник изначально был предназначен для торговли на новостях, поэтому вы вводите день новостей в месяце, час и минуту, фиксируете прибыль в пипсах, срок действия в минутах - через сколько минут после новостей закрываются отложенные ордера, если движение не произошло. , BEPips - если один ордер сработает и должен был выйти в безубыток, через сколько пипсов прибыль. Если If трейлинг-стоп = 0, то трейлинга не будет. Если вы устанавливаете трейлинг, установите количество пипсов, чтобы держаться подальше от цены, если в прибыли.

Для ручной торговли вы можете оставить DayOfNews равным нулю, чтобы EA торговал каждый день в указанные час и минуту, или вы можете вручную установить день каждый день, когда вы торгуете.

Также вам необходимо установить StopLoss на желаемое количество пипсов (не пунктов).

Установите SteDistance на любое расстояние от цены в указанное время, когда вы хотите, чтобы отложенные ордера (30 пипсов, я думаю, вы сказали).

Установите срок действия в минутах, чтобы указать, сколько минут вы хотите, чтобы ордера были активны, прежде чем EA удалит их, если они не будут выполнены.

В любом случае, просмотрите код и, если у вас есть какие-либо вопросы, задайте их здесь или в личку.

 
diamstar:
Спасибо. Я обязательно напишу что-нибудь после окончания книги, независимо от того, насколько она плоха.


Таков дух :)

Если вы попытаетесь, вы найдете людей, которые помогут вам.

 
diamstar:
Спасибо. Я напишу что-нибудь после того, как закончу книгу, независимо от того, насколько она плоха.


Диамстар, учиться весело, если вы получаете правильную помощь. Не поддавайтесь на это и не верьте, что если сначала это похоже на древнекитайский, то оно того не стоит.

Также не отчаивайтесь от тех, кто не хочет помочь. Помощи много, нужно только найти ее.

Вот несколько советов для вас, если вы хотите учиться:

1.Поддерживайте связь с людьми, которые готовы поделиться (знаниями, ресурсами, кодом и т.д.). Они вам понадобятся

2. Читайте документацию и задавайте вопросы, чтобы у вас было хорошее понимание того, что читать. Вам не нужно запоминать все, просто нужно знать, что доступно и где это найти.

3. Не убивайте себя, пытаясь написать каждый кусочек кода самостоятельно. Это все равно что изобретать колесо.

4.Возьмите в руки любой бесплатный советник, который вы можете скачать, и изучите его код. Поймите, как он структурирован, поймите, что делает каждая функция, а затем изучите, как она это делает.

5. Используйте код и функции, которые работают и нравятся вам, в своем коде. Вы можете скопировать код в любом текстовом редакторе или как скрипты в MetaEditor и сохранить его под значимым именем на будущее или просто сделать заметки о том, что вам нравится в советнике, чтобы вы могли найти это, когда вам это понадобится.

Надеюсь, это поможет.

Удачи

 
thrdel:


Вот кое-что, что может помочь вам начать.

Что касается древнекитайского языка, если вы уже не говорите по-китайски, остановитесь на mql. Это проще, вы можете получить больше помощи, и если у вас когда-нибудь появится светлая идея, mql поможет вам заработать кучу денег. Это также весело.

Итак, начнем:


Я добавил несколько кусочков кода, чтобы сделать его пригодным для торговли на новостях и ручного ввода. Возможно, он подойдет и для ваших целей.

Этот советник изначально предназначался для торговли на новостях, поэтому вы вводите день месяца, час и минуту, тейк-профит в пунктах, экспирация в минутах - через сколько минут после новости закрыть отложенные ордера, если движение не произошло, BEPips - если один ордер сработает и будет двигаться в безубыток, через сколько пунктов в прибыли. Если трейлинг-стоп = 0, то трейлинга не будет. Если вы установили трейлинг, задайте количество пунктов, которое нужно отстоять от цены, если она в прибыли.

Для ручной торговли вы можете оставить DayOfNews равным нулю, тогда советник будет торговать каждый день в указанный час и минуту, или вы можете вручную устанавливать день каждый день, когда вы торгуете.

Также необходимо установить StopLoss на желаемое количество пунктов (не пунктов).

Установите SteDistance на то расстояние от цены в указанное время, на котором вы хотите устанавливать отложенные ордера (30 пунктов, как вы сказали).

Установите Expiration in minutes - сколько минут ордера должны быть активны, прежде чем советник удалит их, если они не будут исполнены.

В любом случае, посмотрите код и, если у вас есть вопросы, задайте их здесь или напишите мне.


Я думаю, что ОП - начинающий программист. Я сомневаюсь, что он/она поймет ваш код.

Смогли бы вы разобраться в своем коде, когда только начинали учиться?

 
GumRai:


Я думаю, что ОП - начинающий программист. Я сомневаюсь, что он/она поймет ваш код.

Смогли бы вы понять свой код, когда только начинали учиться?

Я очень благодарен. Я попробую код и все еще читаю книгу, чтобы понять все до мелочей. Я буду сообщать вам о любых проблемах, с которыми я столкнусь. Спасибо
 
GumRai:


Я думаю, что ОП - начинающий программист. Я сомневаюсь, что он/она поймет ваш код.

Смогли бы вы разобраться в своем коде, когда только начинали учиться?


Ну, GumRay, код есть, документация по mql доступна, в коде есть некоторые объяснения, и мы здесь, чтобы помочь. Как я уже сказал, "если у вас есть вопросы, задавайте их здесь или пишите мне".

Это не значит, что у меня есть все ответы, просто я готов помочь, если diamstar готов учиться.

"Я сомневаюсь, что он/она поймет ваш код." на данный момент или не совсем. Также код может быть не на 100% тем, что он/она ищет (я старался изо всех сил, учитывая имеющуюся информацию), но это хорошее начало.

Вы же знаете, насколько легче учиться на практических примерах?

Я понимаю, что в этом советнике так много информации для новичка, и что может возникнуть много вопросов, но именно поэтому мы здесь, не так ли?

Конечно, я не смог понять все это, когда учился (я все еще учусь), по крайней мере, не все с первого раза, но diamstar сумел найти правильный форум, чтобы попросить о помощи, и, похоже, полон решимости учиться.

Давайте пожелаем ему/ей всего наилучшего и поможем, если сможем.

 
thrdel:


Что ж, GumRay, код есть, документация по mql доступна, в коде есть некоторые пояснения, и мы здесь, чтобы помочь. Как я уже сказал, "если у вас есть вопросы, задавайте их здесь или пишите мне".

Это не значит, что у меня есть ответы на все вопросы, просто я готов помочь, если diamstar готов учиться.

"Я сомневаюсь, что он/она поймет ваш код." на данный момент или не совсем. Также код может быть не на 100% тем, что он/она ищет (я старался изо всех сил, учитывая имеющуюся информацию), но это хорошее начало.

Вы же знаете, насколько легче учиться на практических примерах?

Я понимаю, что в этом советнике так много информации для новичка, и что может возникнуть много вопросов, но именно поэтому мы здесь, не так ли?

Конечно, я не смог понять все это, когда учился (я все еще учусь), по крайней мере, не все с первого раза, но diamstar сумел найти правильный форум, чтобы попросить помощи, и, похоже, полон решимости учиться.

Давайте пожелаем ему/ей всего наилучшего и поможем, если сможем.

Я искренне ценю всю оказанную помощь. Неважно, насколько сложен код, это большая помощь, до которой я, возможно, не додумался бы за несколько месяцев, а книги, которые я читаю, делают понимание относительно легким. Научитесь читать и понимать, прежде чем писать что-то осмысленное.
Причина обращения: