あなたのアイデアを元にEAを書くことに100%興味を持つプログラマーを獲得する方法 - ページ 11

 

または、このEAで調整可能なテイクプロフィット設定を整理してください。

以下は、そのコードの全容です。

 
//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
extern double lot=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int tiket=0;
//----
if (iVolume(NULL,0,0)==1){
    Print("WATR1="+iCustom( NULL, 0, "WATR", 0, 0) );
    Print("WATR2="+iCustom( NULL, 0, "WATR", 1, 0) );
    
    if (iCustom( NULL, 0, "WATR", 0, 2)<1000 && iCustom( NULL, 0, "WATR", 1, 1)<1000) {tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,iCustom( NULL, 0, "WATR", 1, 0),0,NULL,16384,0,Red);}
    if (iCustom( NULL, 0, "WATR", 1, 2)<1000 && iCustom( NULL, 0, "WATR", 0, 1)<1000) {tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3, iCustom( NULL, 0, "WATR", 0, 0),0,NULL,16384,0,Green);}
    CheckOrders();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
}
void CheckOrders(){
int pos=0;
int total=OrdersTotal();
for (pos=0;pos<total;pos++) {
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true){ 
if (OrderType()==OP_BUY && OrderStopLoss()<iCustom( NULL, 0, "WATR", 0, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 0, 1),OrderTakeProfit(),0,Green);
if (OrderType()==OP_SELL && OrderStopLoss()>iCustom( NULL, 0, "WATR", 1, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 1, 1),OrderTakeProfit(),0,Red);
                                                                                   }
                                                          }
                                      }
 
Ultramarin:

または、このEAで調整可能なテイクプロフィット設定を整理してください。

以下は、そのコードの全容です。

試してみましたか?
 
Registr:
ウルトラマリン

または、このEAで調整可能なテイクプロフィット設定を整理してください。

以下はコードの全文です。

働いてみましたか?
これが完全なEAコードであれば、Registrは 最高のアドバイスをしてくれたことになります。
 

今なら少しは発言できる

1. 開始関数に属するreturn(0)演算 子は、少なくとも 1 つの中括弧の下に重複して配置される必要があります。ボリュームが1の条件を満たした場合のみ実行されるため。

それ以外の時間は、スタート機能が正しく終了しないはずです。

呼び出されたインジケータからの値<1000の2つの条件は、おそらく、バー上でバッファから1つの値が存在しないことを示すためのアイデアです。

擦れ違い

この場合、現在の価格が1000以上のシンボル(例えば、PDR)に対してのみ機能するようです。

インジケータが現在のバーに1色しか描画しない場合(このバーの別のバッファの値が0である)。

そうでなければ、ほとんどすべての通貨ペアで、インジケータの現在値が常に1000未満となり、すべてのバーで条件がトリガーされることになります。

3.新しいバーの条件は、次のように取ることをお勧めします。


int time;
 
int start
   {
      if (time!=Time[1])
         {
            // расчет индикатора и выполение действий с ордерами
            //-----
            //-----
            //-----
            //-----
            time=Time[1];
 
         }
       return(0);
   }



 
olyakish:

今なら少しは発言できる

1. 開始関数に属する return(0) 演算子は、少なくとも 1 つの中括弧の下に重複して配置される必要があります。ボリュームが1の条件を満たした場合のみ実行されるため。

それ以外の時間は、スタート機能が正しく終了しないはずです。

呼び出されたインジケータからの値<1000の2つの条件は、おそらく、バー上でバッファから1つの値が存在しないことを示すためのアイデアです。

擦れ違い

この場合、現在の価格が1000以上のシンボル(例えば、PDR)に対してのみ機能するようです。

インジケータが現在のバーに1色しか描画しない場合(このバーの別のバッファの値が0である)。

そうでなければ、ほとんどすべての通貨ペアで、インジケータの現在値が常に1000未満となり、すべてのバーで条件がトリガーされることになります。

3.新しいバーの条件は、次のように取ることをお勧めします。


どのキーを押せばいいのか、教えてあげないと......。:)
 

あ、それからもうひとつ。

4.カスタムインジケーターを 12回呼び出すのは、少なくとも神への冒涜です :)

あなたの場合、6回で十分です(私はその回数だけ数えました)。

EAの処理速度は2倍ではなく、1.5倍になると思います。 これらのアクションは(コードの最適化)だけであり、パラメータの最適化と混同しないでください。


//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//|                                   обработал напильником olyakish |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
extern double lot=1;
extern string rem01="Профит в пунктах от текущей цены";
extern int TP=100;
 
int time;
double WATR[2,3];// первое измерение - индекс буфера; второе измерение - индекс бара 
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int tiket=0;
 
   if (Time[1]!=time)
      {
         WATR[0,0]=iCustom( NULL, 0, "WATR", 0, 0);
         WATR[1,0]=iCustom( NULL, 0, "WATR", 1, 0);
         WATR[0,1]=iCustom( NULL, 0, "WATR", 0, 1);
         WATR[1,1]=iCustom( NULL, 0, "WATR", 1, 1);
         WATR[0,2]=iCustom( NULL, 0, "WATR", 0, 2);
         WATR[1,2]=iCustom( NULL, 0, "WATR", 1, 2);         
         Print("WATR1=",WATR[0,0]);
         Print("WATR2=",WATR[1,0]);
    
         if (WATR[0,2]>0 && WATR[1,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3,WATR[0,0],Bid+TP*Point,NULL,16384,0,Green);
            }
         if (WATR[1,2]>0 && WATR[0,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,WATR[1,0],Ask-TP*Point,NULL,16384,0,Red);                           
            }
         CheckOrders();
         time=Time[1];
      }
   return(0);
  }
//+------------------------------------------------------------------+
void CheckOrders()
   {
      int pos=0;
      int total=OrdersTotal();
      for (pos=0;pos<total;pos++) 
         {
            if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
               { 
                  if (OrderType()==OP_BUY && OrderStopLoss()<WATR[0,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[0,1],OrderTakeProfit(),0,Green);}
                  if (OrderType()==OP_SELL && OrderStopLoss()>WATR[1,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[1,1],OrderTakeProfit(),0,Red);}
               }
         }
      return(0);  // на самом деле нужно просто return но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

少なくともこのように

チェック



 
残念ながら、うまくいきません。
 

どなたか説明してください。

全く同じパラメータを持つ2つのEAがあります。

ある人は同時に買い、別の人は同時に売る

エントリーモーメントとエグジットモーメントが同じ

どうすれば、どちらもきれいに消えるのでしょうか?

 
Ultramarin:

どうすればきれいに融合できるのか?

スプレッドについて。