[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 277

 

そうですね、確かに。見てみたが、見あたらなかった。

ありがとうございます(苦笑)。

今日はゆっくりしています。週末に向けて休まないとね。

 
rid >> :

そのくらいでいいんです-。



ありがとうございます!!!使うのは...。

 


DDFedor



リド



ありがとうございます。

 

すべて同じ、コードは動作しませんでした、2キャンドル上のすべてのアクションを行いました。そして、位置はすでにもっと開いていないことを学ぶ必要があった...それは私が使用するすべての預金できたことをすべてで開いたので(( リド見て、多分あなたは何を追加する必要があります...非常に感謝されるだろう

 

助けてください。夜間取引してくれるEAが欲しいです。コードを書いているところ

int start()
{
string Symb;
Symb=Symbol();
string Vremya;
Vremya=TimeToStr(TimeLocal(),TIME_MINUTES);
if(Vremya > 23:00 || Vremya < 06:00 )
{
// тут торговые функции
}
}

エラーが発生します

'||' - 条件を文字列にすることはできません。

と条件を短くすると

if(ヴレミヤ > 23:00

が動作します。

そして、
になれば

if(ヴレミヤ < 06:00 )

は動作しません。


何が問題なのか理解できない。時刻の合わせ方を教えてください。


 
morok >> :

全て同じですが、コードがうまくいかず、2本のローソク足で全てのトレードを行いました。

確かにそうですね...。

ORDERSEND fiにマジックをセットするのを忘れていました。

今は正常に動作しています。確認しました。異なる方向性の取引は2つまで、一方向の取引は1つまでとすることができます。

どのような種類の取引も1つも必要ない場合は、f-ki NumberOfPositions(c)において、取引の種類を-1(マイナス1)に置き換える必要があります。

extern int   Magic = 777;
extern int       Ema1=14;
extern int       Ema2=48;
double Ema_1;
double Ema_2;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   //int Orders = OrdersTotal(); 
   Ema_1 =iMA(NULL, 0, Ema1, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_2 =iMA(NULL, 0, Ema2, 0,MODE_SMMA, PRICE_MEDIAN, 0);   
   int ticket;
//------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1 && Ema_1> Ema_2) 
    {
      ticket=OrderSend(Symbol(),OP_BUY,0.5,Ask,10,Ask-850*Point,Ask+550*Point,"kupil", Magic,0,Green);
    } 
//------------------------------------------------------
   if ( NumberOfPositions(NULL,OP_SELL, Magic)< 1 && Ema_1< Ema_2) 
    {
      ticket=OrderSend(Symbol(),OP_SELL,0.5,Bid,10,Ask+850*Point,Bid-550*Point,"kupil", Magic,0,Violet);
    } 
//------------------------------------------------------
   return(0);
  }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}
  return( kp);
}




 
alderru >> :

iTime 機能が何を示しているのか教えてください。

10桁の数字は何なんだ?秒単位?

年-月-日-時間-分に変換する方法は?

>> バーシフトを設定するだけで、デフォルトの時刻と日付が得られます(time=1 または true の場合は、時刻のみが得られます)。

とても便利な機能です、おすすめします。

string Times(int Sdvig, bool time=0)
{//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  string YAER   = TimeYear( Time[ Sdvig]);
  string DAY    = TimeDay( Time[ Sdvig]);
  string HOUR   = TimeHour( Time[ Sdvig]);
  string MINUTE = TimeMinute( Time[ Sdvig]);
  int month = TimeMonth( Time[ Sdvig]);
  string MONTH;
  switch( month)
    {case 1: MONTH = "янв ";break;
     case 2: MONTH = "фев ";break;
     case 3: MONTH = "март";break;
     case 4: MONTH = "апр ";break;
     case 5: MONTH = "май ";break;
     case 6: MONTH = "июнь";break;
     case 7: MONTH = "июль";break;
     case 8: MONTH = "авг ";break;
     case 9: MONTH = "сен ";break;
     case 10: MONTH = "окт ";break;
     case 11: MONTH = "нояб";break;
     case 12: MONTH = "дек ";break;              
     default: MONTH = "----";break;
    }
 if(TimeHour( Time[ Sdvig])<10) HOUR= "0"+ HOUR;     
 if( MINUTE=="0") MINUTE="00";
 if( time)return( HOUR+":"+ MINUTE);                   
 else return( YAER+"   "+ MONTH+" "+ DAY+"   "+ HOUR+":"+ MINUTE);
}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

2段目の調整を試みたが、うまくいかなかった。

してみましたが、テスト後すぐに1つの注文を開けたり閉めたりしてしまうので

extern int   Magic = 777;
extern int       Ema1=14;
extern int       Ema2=48;
extern int       Ema3=100;
double Ema_1;
double Ema_2;
double Ema_3;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   //int Orders = OrdersTotal(); 
   Ema_1 =iMA(NULL, 0, Ema1, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_2 =iMA(NULL, 0, Ema2, 0,MODE_SMMA, PRICE_MEDIAN, 0);
   Ema_3 =iMA(NULL, 0, Ema3, 0,MODE_SMMA, PRICE_MEDIAN, 0);     
   int ticket;
//------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1 && Ema_1> Ema_2 && Ema_2> Ema_3) 
    {
      ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,10,0,0,"kupil", Magic,0,Green);
    } 
//------------------------------------------------------
   if ( NumberOfPositions(NULL,OP_SELL, Magic)< 1 && Ema_1< Ema_2 && Ema_2< Ema_3) 
    {
      ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,10,0,0,"kupil", Magic,0,Violet);
    } 
//--------------------------------------------------------
 if ( NumberOfPositions(NULL,OP_BUY, Magic)>= 1 && Ema_1< Ema_2) //--проверяю есть ли ордер BUY и крою его если линии ема пересеклись
    {
      ticket=OrderClose(OrderTicket(),0.1,Bid,300,Violet);
    } 
//------------------------------------------------------
 if ( NumberOfPositions(NULL,OP_SELL, Magic)>= 1 && Ema_1> Ema_2) //--проверяю есть ли ордер SEll и крою его если линии ема пересеклись
    {
      ticket=OrderClose(OrderTicket(),0.1,Ask,300,Green);
    } 
//------------------------------------------------------
   return(0);
  }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}
  return( kp);
}
 
rid писал(а)>>

了解です。履歴にポジションがあったかどうかを判断するには、こうすればよい。

しかし、その場合、あなたのコードはテスターでしか動作しないでしょう。そうしないと、EAオンラインのスイッチを入れるたびに、マジックを交換しなければなりません。


まさに、それこそが必要なことなのだ!

このコードをこのグリッドに正しく挿入する方法を教えてください。

(直接入れると、テスターが最初のポジションのオープニングで止まってしまうだけです)

for (int i=0; i< OrdersTotal(); i++)                          {

    if (!(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY ))) continue;

//выбираем из истории счета

    if (OrderSymbol() != Symbol()) continue;    

     if ( OrderMagicNumber()== Magic)                            {

              позиции = true;

                                                             }}



//Открытие позиции:



bool Open_Buy() {

   bool res=false; 

if( условие_1)      {

            if ( советник еще не открывал позиций с Магическим номером)    {

                    res=true;     }}

else    {

    if( условие_1)       { 

   if ( условие_2 опирается на данные прошлого ордера)       { 

   res=true;     }}}

return( res);

}
 
morok >> :

2段目を調整しようとしたが、うまくいかなかった。

一見、理にかなっているように見えますが、テストでは注文を一度にオープンしたりカバーしたりします。

私の時は、クロージングポジションを扱いました。

https://www.mql5.com/ru/forum/105913

//==================Закрытие позиций ============================
 
//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect( v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()== Magic)      { 
//-----------------------------------------------------                  
if(OrderType()== OP_BUY) { // если открыта бай-позиция                                   
  if( вот здесь вставляй свои условия закрытия)  {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Вlack); // закрываем позицию
                                 }       
                               }  
 //--------------------------------------------------------
if(OrderType()== OP_SELL) { // если открыта селл-позиция 
 if( вот здесь вставляй свои условия закрытия)    {
   OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // закрываем позицию
                     }       
                   }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
//------------конец блока закрытия позиций-----------------

このブロックはSTART関数内に挿入する必要があり、Ema_1,Ema_2,Ema_3の計算の直後、多分一番最初に挿入します。
また、PRICES OPENでアドバイザーを動作させる必要があるらしく、そうしないとMAクロスがほぼ毎ティックで常にオープンポジションをクローズしてしまいます。

EAは、他のEAや手動で開いたポジションも含めて、すべてのポジションを決済してしまうからです。

しかし、さらにシンプルにする方法はすでに書いています。ポジションを開くときに NumberOfPositions(NULL,OP_BUY,Magic) と NumberOfPositions(NULL,OP_SELL,Magic) の代わりに、単に

NumberOfPositions(NULL,-1,Magic)

とすると、常に1つ以上のポジションが存在することはないでしょう。閉塞感なく。