我需要一个代码的帮助 - 页 2

 
deVries:


在我看来,你仍然对编码一无所知

你没有做任何事情来了解编码的知识

你做了什么尝试来做这个?

如果你想得到帮助,请展示你的尝试

还是没有什么可以帮助你的......

是的。这对我来说是完全陌生的。你有什么书可以介绍给我吗?
 
diamstar:
是的。这对我来说是完全陌生的。你有什么书可以介绍给我吗?

书中的一个文件
下载 - 2 Mb
 
deVries:

书中的一个文件
下载 - 2 Mb
谢谢你。我在完成这本书后会写一些东西,无论多么糟糕。
 
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);
  }
//+------------------------------------------------------------------+


我添加了一些代码,使其适合新闻交易和手动输入。它可能适合您的目的。

此 EA 最初旨在交易新闻,因此您输入新闻日、小时和分钟, 点数为单位获利,以分钟为单位的到期 - 如果未发生移动,则在新闻后多少分钟关闭挂单, BEPips - 如果一个订单被触发并且浪费了盈亏平衡,在多少点利润之后。如果如果追踪止损 = 0,则不会有追踪。如果您设置尾随,请设置点数以在获利时远离价格。

对于手动交易,您可以将 DayOfNews 设为零,以便 EA 每天在指定的时间和分钟进行交易,或者您可以在每天交易时手动设置日期。

您还需要将止损设置为您想要的点数(不是点数)。

将 SteDistance 设置为在您想要挂单的指定时间与价格的任何距离(我相信您说过 30 点)。

将 Expiration in minutes 设置为您希望订单处于活动状态的分钟数,然后 EA 将在未成交的情况下将其删除。

无论如何,请查看代码,如果您有任何问题,请在此处发布或 pm 我。

 
diamstar:
谢谢你。我在完成这本书后会写一些东西,无论多么糟糕。


这就是我们的精神 :)

如果你尝试,你会发现有人会帮助你。

 
diamstar:
谢谢你。读完这本书后,不管有多糟糕,我都会写点东西。


diamstar,如果你得到正确的帮助,学习是很有趣的。不要上当受骗,相信如果一开始看起来像古代汉语,那就不值得了。

另外,不要因为那些并不真正想帮忙的人而感到气馁。有很多帮助,你只需要找到它。

如果你想学习,她给你一个建议。

1.与那些愿意分享(知识、资源、代码等)的人保持联系。你会需要他们的。

2.阅读文档并提出问题,这样你就能很好地理解该读什么。你不需要记住所有的东西,只需要知道什么是可用的以及在哪里可以找到它。

3.不要为了自己写出每一段代码而过度杀戮自己。这就像重新发明车轮一样。

4.获得你可以下载的任何免费EA,并仔细阅读代码。了解它的结构,了解每个功能的作用,然后研究它是如何做到的。

5.你可以在任何文本编辑器中复制代码,或在MetaEditor中作为脚本,并将其保存在一个有意义的名称下,以备将来 使用,或者只是将你喜欢的东西记在哪个EA中,这样你就可以在需要时找到它。

希望这对你有帮助。

好运

 
thrdel:


这里有一些东西可能有助于你开始学习。

关于古代汉语的问题,除非你已经会说汉语,否则请坚持使用mql。它更容易,你可以得到更多的帮助,如果你有一个聪明的想法,mql会帮助你赚很多钱。它也很有趣。

所以,我们开始吧。


我添加了一些零碎的代码,使其适用于新闻交易和手动输入。它可能会适合你的目的。

这个EA最初是用来交易新闻的,所以你要输入每月的新闻日,小时和分钟,获利点数,分钟内到期 - 如果没有发生移动,在新闻后多少分钟关闭挂单,BEPips - 如果一个订单被触发,并被移动到收支平衡,在多少点的利润。如果如果追踪止损=0,将没有追踪。如果你设置了追踪,那么在获利的情况下,要设置远离价格的点数。

对于手动交易,您可以将DayOfNews设为0,这样EA将每天在指定的小时和分钟进行交易,或者您可以在每天交易时手动设置日期。

同时,您需要将止损设置为您希望的点数(而不是积分)。

将SteDistance设置为你希望挂单在指定时间与价格的任何距离(我相信你说的是30点)。

将 "到期时间"(以分钟为单位)设置为您希望订单在未成交前的多少分钟内有效,EA将删除它们。

无论如何,请看一下代码,如果你有任何问题,请在这里发表或给我发邮件。


我认为,OP是一个新手程序员。我怀疑他/她是否能理解你的代码。

当你刚开始学习的时候,你能理解你的代码吗?

 
GumRai:


我认为,OP是一个新手程序员。我怀疑他/她会理解你的代码。

在你刚开始学习的时候,你能理解你的代码吗?

我真的很感激。 我将试着使用这些代码,并且仍然阅读这本书,以便我能够理解它的每一点。如果我遇到任何问题,我都会向你报告。谢谢
 
GumRai:


我认为,OP是一个新手程序员。我怀疑他/她是否能理解你的代码。

在你刚开始学习的时候,你能理解你的代码吗?


好吧,GumRay,代码在那里,mql的文档是可用的,代码有一些解释,我们在这里提供帮助。正如我所说, "你有任何问题,请在这里发表,或给我发邮件"。

这并不意味着我有所有的答案,只是说如果diamstar愿意学习,我愿意帮助。

" 我怀疑他/她是否能理解你的代码。" 暂时还是不能完全理解。另外,这段代码可能不是100%的他/她所要的(鉴于现有的信息,我确实尽力了),但这是一个好的开始。

你知道用实际的例子来学习是多么的容易,对吗?

我知道,对于一个新手来说,该EA中的信息太多,可能会有很多问题,但这就是我们在这里的原因,不是吗?

当然,我在学习的时候并不能理解所有的内容(我还在学习),至少在第一次的时候不能理解所有的内容,但是diamstar设法找到了正确的论坛来寻求帮助,而且似乎决心学习。

让我们祝愿他/她一切顺利,并提供力所能及的帮助。

 
thrdel:


好吧,GumRay,代码在那里,mql的文档是可用的,代码有一些解释,我们在这里帮助。正如我所说, "你有任何问题,请在这里发表,或者给我发邮件"。

这并不意味着我有所有的答案,只是说如果diamstar愿意学习,我愿意帮助。

" 我怀疑他/她会理解你的代码。" 暂时还是不完全。另外,这段代码可能不是100%的他/她所要的(鉴于现有的信息,我确实尽力了),但这是一个好的开始。

你知道用实际的例子来学习是多么的容易,对吗?

我知道,对于一个新手来说,该EA中的信息太多,可能会有很多问题,但这就是我们在这里的原因,不是吗?

当然,我在学习的时候并不能理解所有的内容(我还在学习),至少在第一次的时候不能理解所有的内容,但是diamstar设法找到了正确的论坛来寻求帮助,而且似乎决心学习。

让我们祝愿他/她一切顺利,并在我们力所能及的范围内提供帮助。

我真心感谢所有提供的帮助。无论代码有多复杂,它都是巨大的帮助,我可能几个月都想不出来,而且我读的书让我的理解相对容易。在写一些有意义的东西之前,你要学会阅读和理解。