[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 186

 
Vinin:


if(c %2==0)//偶数


何に対しても平等にダブルチェックはしない。
 
既に終了した損切り注文のforループを実行する方法を教えてください。それとも、誰かがすでに、損切りトレードが終了したら、ロットを掛けるという機能をもっているのでしょうか?
 
tara:

何でもかんでも平等にダブルチェックはしない。


以前、整数のみと書いたはずなのですが。それとも、よく読まないのですか?

ヴァイン 2011年09月18日 03時14分|削除
ニック○○○○

パズルへの質問)。

数字が偶数か奇数かをプログラムで 判断する方法とは?

例えば、こんな感じです。

int a、b、c。

a=2;

b=3;

c=a+b

cは偶数か奇数か?



数字が整数の場合、2で割った余りを確認する。

if (c % 2==0) //четное

 

コードの誤りを明確にする


アバター
2
Qwuyt 2011.09.18 11:56

こんにちは。

どなたかコードを見て、私の間違いが何であるかをアドバイスしてください。コンパイル時にエラーが多発しました。初めてのEAで、まだ理解し始めたばかりです。Expert Advisorの考え方は以下の通りです。月曜日のある時間に、前週の終値からXポイント離れたところに、両方向に保留の注文を出します。金曜日、所定の時間になると成行注文を決済し、保留中の注文を削除します。以上です。

//+------------------------------------------------------------------+
//|                                                         Week.mq4 |
//|                                          Copyright © 2011, Qwuyt |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Qwuyt"
#property link      ""

//--- input parameters
extern double    lot=0.01;                                                 //размер лота 
extern int       tp=200;                                                   //тейк профит
extern int       sl=50;                                                    //стоплосс
extern int       move=100;                                                 //движение цены 
extern int       hc=22;                                                    //час закрытия 
extern int       ho=4;                                                     //час закрытия
double BP;                                                                 //цена открытия бай
double SP;                                                                 //цена открытия селл
int Ticket;                                                                
int Tip;                                                                   //тип ордера
int Curday;                                                                //день недели
bool Ans = false;                                                          //ответ сервера после закрытия ордера
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                               
  {
  int Curday = DayOfWeek                                    
  double BP = iClose(NULL,10080,1)+NormalizeDouble(move*Point,Digits);     //      
  double SP = iClose(NULL,10080,1)-NormalizeDouble(move*Point,Digits);
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие бай
    {
    OrderSend (Symbol(),OP_BUYSTOP,lot,BP,3,sl,tp,NULL,0,0,Red)
    }
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие селл
    {
    OrderSend (Symbol(),OP_SELLSTOP,lot,SP,3,sl,tp,NULL,0,0,Red)
    }
    while(true)                                                           //цикл закрытия орд.
     {
      if (Tip==0 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      if (Tip==1 && hc >= Hour && Curday=6)                               // Открыт ордер Sell, 22 часа пятницы закрыть
        {                                                                 //

         RefreshRates();                                                   // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);
         return;                                                          // Выход из start()
        }
      if (Tip==4||Tip==5 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderDelete(Ticket,CLR_NONE);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      break;                                                               // Выход из while
     }
     Tip = OrderType();
return();
  }
添付ファイル
週_1.mq4(4.52 KB)



929
abolk 2011年09月18日 12時00分 正|削除

を開始します。

1) 各オペレータの末尾に ; を付ける。

2)Hour() などの正しい関数を使う。

 
Falmera:
既に終了した損切り注文のforループを実行する方法を教えてください。それとも、誰かがすでに、損切りトレードが終了したら、ロットを掛けるという機能をもっているのでしょうか?

何かコツはありますか?
 
Falmera:

というわけで、よろしくお願いします。


この機能を実装するための自分の試みを見せてください - 「初心者向けヘルプ」スレッド。

または、"search for last closed order "などで検索してください - この話題は昔からあります。

 
Falmera:

では、ヒントをください。

アバランチ支店のフクロウをご覧ください。
 

プログラミング言語を学習しているのですが、プログラムの動作が理解できなくて困っています。教科書を元にEAを書きましたが、少し違う動作原理でひねっています。

Expert Advisor は、2 つのムウイング平均をベースにしています。移動平均線が交差すると、注文が終了し、反対側の注文が開始されるという単純なものです。EAを書きましたが、問題なく動作しています。もちろん、若干のハンデはありますが、考え方に沿うものです。問題の全体像は次の通りです(太字)。

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // Bの場合

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

移動平均の計算方法を変えて(プラス記号を表示できる)、単純な方法(MODE_EEMA )ではなく指数法 MODE_SMA) 、さらにもう一つ(MODE_SMMA)、いわゆる平滑法を入れると、すべてがおかしくなります。EAは設定された期間の一番最初に注文を開き、最後に閉じるので、動作原理はさらに面白くなります(ストラテジーテスターで)。すなわち、1年間、期首に1つの取引を開始し、期末にそれを決済する。結果的にExpert Advisorでプラスになったが、そんなプラスは必要ない。自分でコインを使って買いか売りの注文を出し、1年後に勝っているか負けているかを見ることができるのです。ちなみに、MODE_SMAを MODE_LWMA 線形加重移動平均)に設定すると、プログラムは正常に動作 します。

何が問題なのか、アドバイスをお願いします。原理は同じですが、移動平均の計算方法が少し変わりました。

コード全体は添付ファイルのとおりです。


ここで返信をもらったが、実力がなく、メリットもない。4本の移動平均線を使っているとのことですが。これは真実ではありません、2つの移動平均がありますが、各移動平均は2つのバー(4配列呼び出しの合計、A、B、C、D)の値を取った:1および2。また、注文をクローズした場合、Totalの注文数を下げるべきと書かれていましたが、注文はOdertotal関数でカウントされており、注文をクローズすると、次の反復で注文合計自体が値を変えるので、その必要はありません。また、いわゆるマジックナンバーを使って注文を管理することも勧められていますが、私はまだその部分まで到達していません。繰り返しになりますが、MODE_SMAとMODE_LWMAを使用した場合はプログラムが動作しますが、MODE_EMAとMODE_SMMAを使用した場合は動作しません。理由を知っている人、答えを書いてください。

ファイル:
 
Falmera:

ヒントをください。
アバランチトピックに行けば、どんなロット増でも十分なアドバイザーがいますよ。右上のフォーラムを検索するか、googleで検索してください。
 
neisseria:

プログラミング言語を学習しているのですが、プログラムの動作が理解できなくて困っています。教科書を元にEAを書きましたが、少し違う動作原理でひねっています。

Expert Advisor は、2 つのムウイング平均をベースにしています。移動平均線が交差すると、注文が終了し、反対側の注文が開始されるという単純なものです。EAを作成し、問題なく動作しています。もちろん、若干のハンデはありますが、考え方に沿うものです。問題の全体像は次の通りです(太字)。

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // Bの場合

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

移動平均の計算方法を変えて(プラス記号を表示できる)、単純な方法(MODE_EEMA )ではなく指数法 MODE_SMA) 、さらにもう一つ(MODE_SMMA)、いわゆる平滑法を入れると、すべてがおかしくなります。EAは設定された期間の一番最初に注文を開き、最後に閉じるので、動作原理はさらに面白くなります(ストラテジーテスターで)。すなわち、1年間、期首に1つの取引を開始し、期末にそれを決済する。結果的にExpert Advisorでプラスになったが、そんなプラスは必要ない。自分でコインを使って買いか売りの注文を出し、1年後に勝っているか負けているかを見ることができるのです。ちなみに、MODE_SMAを MODE_LWMA 線形加重移動平均)に設定すると、プログラムは正常に動作 します。

何が問題なのか、アドバイスをお願いします。原理は同じですが、移動平均の計算方法が少し変わっただけです。

コード全体は添付ファイルのとおりです。


ここで返信をもらったが、実力がなく、メリットもない。4本の移動平均線を使っているとのことですが。これは真実ではありません、2つの移動平均がありますが、各移動平均は2つのバー(4配列呼び出しの合計、A、B、C、D)の値を取った:1および2。また、注文が閉じられたらTotalの注文数を下げるべきと書かれていましたが、注文はOdertotal関数を使ってカウントされており、注文を閉じると次の繰り返しで注文合計自体の値が変わるので、その必要はないです。また、いわゆるマジックナンバーを使って注文を管理することも勧められていますが、まだマニュアルのその部分には至っていません。繰り返しになりますが、MODE_SMAとMODE_LWMAを使用した場合はプログラムが動作しますが、MODE_EMAとMODE_SMMAを使用した場合は動作しません。理由を知っている人、答えを書いてください。


条件も再確認しておきます。そこに問題があるのかもしれない