MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 118

 
trader781:
Artyomさん、上のコードを投げてみました。
以下は、私が返信しているあなたの投稿へのリンクです:。ニックネームの横のストックにあります。

上記で投げたコードと同じリンクをコピーし、参加者の投稿を参照する際にあなたの投稿に貼り付けてください。それとも、そんなに場所や内容を知らなくても探したいと思っているのでしょうか?
 
Artyom Trishkin:
以下は、私が返信しているあなたの投稿へのリンクです:。ニックネームの横のストックエリアにあります。

上で投げたコードと同じリンクをコピーして、参加者のメッセージを参照するときに、メッセージに貼り付けてください .それとも、そんなに場所や内容を知らなくても探したいと思っているのでしょうか?

https://www.mql5.com/ru/forum/160683/page109

1082メッセージ

ただ、このリソースではどうなのかわかりませんが、通常、モデレーターは編集を含むすべてのユーザーの投稿を見ることができます。

このような記事へのリンクはどのようにすればいいのか、私にはわかりません。

 
trader781:

https://www.mql5.com/ru/forum/160683/page109

1082メッセージ

ただ、このリソースについてはわかりませんが、通常、モデレーターは編集を含め、どのユーザーの投稿もすべて見ることができます。

このような記事へのリンクはどのようにすればよいのか、私にはわかりません。

ここからが 本題です。

 
trader781:

https://www.mql5.com/ru/forum/160683/page109

1082メッセージ

いや、自分でアップロードする気はさらさらないのですが。

SRCボタンを使って、ここにコードとして添付してください。そうすれば、ダウンロードして正しい端末フォルダ に配置することなく、安全にコードを見ることができます。
 
Artyom Trishkin :
いいえ、ダウンロードしたくありません。

SRCボタンを使用してコードとしてここに添付してください。そうすれば、コードをダウンロードしてターミナルの適切なフォルダーに配置しなくても、コードを安全に確認できます。なぜ、あなたを助けることができる人々の生活を複雑にするのでしょうか。

どうか、端末にダウンロードせずに確認する方法がわからないだけです。また、ページを詰まらせるコードをここにスローすることの利点について説明してください。

//+------------------------------------------------------------------+
//|                                                     Close_MA.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern bool Uslovie1= false ; //Uslovie 4 6+50 MA

extern bool OpenOrders= false ; //+---Открыть ордер

extern double Lots= 0.01 ; //Oбьем открываемого ордера

extern const string Настройки_работы_советника= "" ;

extern int Period1= 6 ; //Период 1МА
extern ENUM_APPLIED_PRICE PRICE1= PRICE_MEDIAN ;             // 1МА По цене

extern int Period2= 50 ; //Период 2МА
extern ENUM_APPLIED_PRICE PRICE2= PRICE_MEDIAN ;             // 2МА По цене

extern int Period3= 1000 ; //Период 3МА
extern ENUM_APPLIED_PRICE PRICE3= PRICE_MEDIAN ;             // 3МА По цене

extern uint X= 1 ;                                           // отклонение от ма, пунктов
extern bool PlaySound = false ;
extern int M= 1000 ;                                         // миллисекунды в Sleep
extern int R;                                               // раз повторения музыки
extern int count= 0 ;  
extern int Step= 500 ;                                       // счетчик тиков 500макс.
int    i;                                                   // исходный счетчик ордеров
int    p= 0 ;                                                 // внутренняя для playSound
bool   y = false ;                                           // для удобства сравнений условий 1,2,3,4,5,6  
bool   dummy;                                               // для выхода функций в переменную
int    ticket = 0 ;                                           // тикет открываемого ордера
int Magic = 222 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+



int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
     {
       if ( Bars < 801 || ( IsTradeAllowed ()== false )) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
         return ;
     }
//+----------------------------------------------------------------

   double ma1= NormalizeDouble ( iMA ( NULL , 0 ,Period1, 0 , MODE_SMA ,PRICE1, 0 ), 5 );

   double ma2= NormalizeDouble ( iMA ( NULL , 0 ,Period2, 0 , MODE_SMA ,PRICE1, 0 ), 5 );   //три заданных параметра ма

   double ma3= NormalizeDouble ( iMA ( NULL , 0 ,Period3, 0 , MODE_SMA ,PRICE1, 0 ), 5 );
//+-----------------------------------------------------------------  Открытие ордеров


                               //+----Купить


       {
         if ( MathAbs ( Bid -ma3)< 1000 * Point () && (myOrdersTotal()== false ))  
           {
            ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray ); //+------отправка 1 ордера
            HLineCreate();  
           }
         else if (( Ask >=(FindLastOrderOpenPrice()+(Step* _Point )))&& myOrdersTotal()) //+------------если ордер в плюс
              {
            ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray );
            HLineMove();
              }
         else if (( Ask <=(FindLastOrderOpenPrice()-(Step* _Point )))&& myOrdersTotal()) //+------------если ордер вплюс
              {
            ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrLightGray );
            HLineMove();
              }
         else if (ticket== 0 )
           {
             return ;
           }          
     /*          
                               //+----Продать

         if(MathAbs(Bid-ma3)>1000*Point() && (myOrdersTotal()==false))
           {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);//+------отправка 1 ордера
            HLineCreate1();  
           }
         else if ((Ask>=(FindLastOrderOpenPrice()+(Step*_Point)))&& myOrdersTotal())//+------------если ордер в минус
              {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
            HLineMove1();
              }
         else if ((Ask<=(FindLastOrderOpenPrice()-(Step*_Point)))&& myOrdersTotal())//+------------если ордер вплюс
              {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
            HLineMove1();
              }
         else if(ticket==0)
           {
            return;
           }       */
    
       }
      
    
      
//+------------------------------------------------------------------Условия
   if (Uslovie1== true ) //Bid+ma800
     {
       if (( Bid >=ma3-X* Point && Bid <ma3) || ( Bid <=ma3+X* Point && Bid >ma3))
        {
           {y= true ;}
        }
     }
//+------------------------------------------------------------------закрыть покупки или продажи

   if ((y== true ) && (myOrdersTotal()== true )) //продажа
     {
      dummy=( OrderClose ( OrderTicket (), OrderLots (), Ask , 0 ,White));
     }
   if ((y== true ) && (myOrdersTotal()== false ))
     {
        dummy= false ;
        HLineDelete();
        HLineDelete1();
     //  ExpertRemove();  
     }

  }
//+------------------------------------------------------------------+
bool myOrdersTotal() //если ордера есть
  {
   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) //   цикл будет работать пока не останется ордеров
     {
       if ((( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))== true ) && OrderSymbol ()== Symbol () && ( OrderType ()< 2 ))
        {
         return true ;
        }
     }
   return false ;
  }
//-------------------------------------------------------------------
double FindLastOrderOpenPrice()
  {
   double oldorderopenprice= 0 ;
   int     oldticket= 0 ;
   ticket= 0 ;
   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) //   цикл будет работать пока не останется ордеров
     {
       if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic)
         && ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ))
        {
         oldticket= OrderTicket ();
         if (oldticket>=ticket)
           {
            ticket=oldticket;
            oldorderopenprice= OrderOpenPrice ();
           }
        }
     }
   return (oldorderopenprice);
  }
//-------------------------------------------------------------------  





//+------------------------------------------------------ часть Buy      bool HLineCreate();

                            
bool HLineCreate( const long             chart_ID= 0 ,           // ID графика
                 const string           name= "Buy" ,           // имя линии
                 const int              sub_window= 0 ,         // номер подокна
                 double                 price1= 0 ,             // цена линии
                 const color            clr= clrAzure ,         // цвет линии
                 const ENUM_LINE_STYLE style= STYLE_DASHDOT , // стиль линии
                 const int              width= 3 ,             // толщина линии
                 const bool             back= false ,           // на заднем плане
                 const bool             selection= true ,       // выделить для перемещений
                 const bool             hidden= false ,         // скрыт в списке объектов
                 const long             z_order= 0 )           // приоритет на нажатие мышью                
    {
   if (!price1)
      price1=FindLastOrderOpenPrice();
   ResetLastError ();
   if (! ObjectCreate (chart_ID,name, OBJ_HLINE ,sub_window, 0 ,price1))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать горизонтальную линию! Код ошибки = " , GetLastError ());
       return ( false );
           //--- установим цвет линии
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль отображения линии
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим толщину линии
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
       ChartRedraw ();
     }
   return ( true );
  }          
//+------------------------------------------------------------------+          HLineMove();
bool HLineMove( const long    chart_ID= 0 ,         // ID графика
               const string name= "Buy" , // имя линии
               double        price1= 0 )           // цена линии
  {
   if (!price1)
      price1=FindLastOrderOpenPrice();
   ResetLastError ();  
   if (! ObjectMove (chart_ID,name, 0 , 0 ,price1))
     {
       Print ( __FUNCTION__ ,
             ": не удалось переместить горизонтальную линию! Код ошибки = " , GetLastError ());
       return ( false );
     }
   return ( true );
  }
//+------------------------------------------------------------------+         bool HLineDelete();
bool HLineDelete( const long    chart_ID= 0 ,   // ID графика
                 const string name= "Buy" ) // имя линии
  {
   ResetLastError ();
   if (! ObjectDelete (chart_ID,name))
     {
       Print ( __FUNCTION__ ,
             ": не удалось удалить горизонтальную линию! Код ошибки = " , GetLastError ());
       return ( false );
     }
   return ( true );
  }        
//+-----------------------------------------------------------------+      





   //+-----------часть SELL                    bool HLineCreate1
  
  
  
  
   //+------------------------------------------------------    
//+------------------------------------------------------                     bool HLineCreate1();
bool HLineCreate1( const long            chart_ID= 0 ,           // ID графика
                 const string           name= "Sell" ,   // имя линии
                 const int              sub_window= 0 ,         // номер подокна
                 double                 price2= 0 ,             // цена линии
                 const color            clr= clrRed ,         // цвет линии
                 const ENUM_LINE_STYLE style= STYLE_DASHDOT , // стиль линии
                 const int              width= 2 ,             // толщина линии
                 const bool             back= false ,           // на заднем плане
                 const bool             selection= true ,       // выделить для перемещений
                 const bool             hidden= false ,         // скрыт в списке объектов
                 const long             z_order= 0 )           // приоритет на нажатие мышью                
    {
   if (!price2)
      price2=FindLastOrderOpenPrice();
   ResetLastError ();
   if (! ObjectCreate (chart_ID,name, OBJ_HLINE ,sub_window, 0 ,price2))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать горизонтальную линию! Код ошибки = " , GetLastError ());
       return ( false );
           //--- установим цвет линии
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль отображения линии
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим толщину линии
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
       ChartRedraw ();
     }
   return ( true );
  }          
//+------------------------------------------------------------------+          HLineMove1();
bool HLineMove1( const long    chart_ID= 0 ,         // ID графика
               const string name= "Sell" ,         // имя линии
               double        price2= 0 )             // цена линии
  {
   if (!price2)
      price2=FindLastOrderOpenPrice();
   ResetLastError ();  
   if (! ObjectMove (chart_ID,name, 0 , 0 ,price2))
     {
       Print ( __FUNCTION__ ,
             ": не удалось переместить горизонтальную линию! Код ошибки = " , GetLastError ());
       return ( false );
     }
   return ( true );
  }
//+------------------------------------------------------------------+         bool HLineDelete1();
bool HLineDelete1( const long    chart_ID= 0 ,   // ID графика
                 const string name= "Sell" ) // имя линии
  {
   ResetLastError ();
   if (! ObjectDelete (chart_ID,name))
     {
       Print ( __FUNCTION__ ,
             ": не удалось удалить горизонтальную линию! Код ошибки = " , GetLastError ());
       return ( false );
     }
   return ( true );
  }        

 
Artyom Trishkin:
ここに入れて ください。
アルチョム、これは特に才能のある映像のためか?
 
Vitaly Muzichenko:
アルチョム、それは特に才能のある映像のためか?
ええ、そうです。
 
trader781:

私の端末にアップロードせずに確認する方法だけが分からないのでお願いします。また、ページを詰まらせるコードの断片をここに投げることの利点は何 なのか、説明してください。

trader781 さん、コードについてのご質問は?

コードの塊の利点は、例えば、私はテストファイルで、フォーラムのコードの一部をコピーして、ファイルに貼り付けるだけです。そうでない場合は、コード付きのファイルをダウンロードし、その中のフォルダを開いてファイルを貼り付け、その後、削除する必要があります。違いを感じますか?

 
trader781:

私の端末にアップロードせずに確認する方法だけが分からないのでお願いします。また、ここにコードの断片を投げて、ページを詰まらせることの利点は何なのか、説明してください。

クソッタレ...

実際、人々はあなたが主張するエラーを再現するために最小限のコードを作るのが普通です。

でも、コードから判断すると、何をやっているのか全然わかっていないんですね。

関数にはパラメータがあり、それを渡すことができます。特にラインの色。でも、全部デフォルト値で作ってしまって、「私の関数の中身はどうなっているのか、どんなパラメータをもらっているのか」を聞かずに、「ターミナルが失敗した」と言い始めるんですね。それはいいんだけど...。

行を作成する関数からデフォルトのパラメータをすべて削除します。コンパイラは、関数を呼び出す ときにパラメータを設定することを考えさせます。また、重複する関数(名前の最後に1を付けたもの)を削除し、1つの関数に異なるパラメータを付けて使用します。
 
Vitaly Muzichenko:

trader781 さん、具体的にどのようなコードについての質問でしょうか?

コードの断片の利点は、例えば、私はテストファイルを持っていて、フォーラムのコードの断片をコピーしてファイルに貼り付けるだけでよいということです。そうでない場合は、コード付きのファイルをダウンロードし、その中のフォルダを開いてファイルを貼り付け、その後、削除する必要があります。違いを感じますか?

なるほど

アルチョム・トリシキン
クソ部門・・・。

今のところ、許容範囲からは程遠いのは理解していますが、購入の場合、指定した色の破線が 出ないのはなぜか、白でも緑だけでも静かに出ますが、教えてください。

ダブル OP = 5.00000

TP=(OP/100)です。

Print("TP=",TP)。

2017.02.09 21:36:03.650 2015.01.05 04:00:00 マーティン H1-1 USDJPY,H1: TP= 0.5

いつから5を100で割ると0.5 なんだ?