どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 869

 
Top2n:

すみません、同じことを100回繰り返すのは勿体ないです。

もう1ヶ月近く、門の前で羊のように見つめている。何もわからないんです。

課題は、移動平均を13として、より少ない移動平均を計算することです。

つまり、13を基準にして12の期間を計算することです。

簡単に計算できる。Y(N)=1/N*(Y(N+1)*(N+1)-X[N]), ここで Y(i) - MA(i) のゼロバーでの値, X[j] - j番目のバーでの価格; ただこれは計算上無意味で、いずれにしても未来を見ることはできない。
 

こんにちは!尊敬する達人の一人が、私の最初のEAの開始をチェックしたいですか?前に進むことは可能なのでしょうか?何か見落としがあったのでしょうか?具体的な内容を教えていただけると幸いです。フォーラムのどこかで1ポジションだけ開く方法を見たことがあるのですが、コピーしていなかったので、今は見つけられなくなってしまいました。助けてください。

ありがとうございました。

// Expert Advisorの試用版について

//--------------------------------------------------------------------

//------Вводные данные:-----------------------------------------------------------

input double Lots = 0.1; // ロット数

input int MovingPeriod =5; // МА計算周期

input int MovingShift =0; // MA シフト

input int InpBandsPeriod=10; //ボリンジャーバンドの 期間

input int InpBandsShift=0; // ボリンジャーバンドのシフト量

input double InpBandsDeviations=2.0; // ボリンジャーバンドの偏差値

input int K_Period=30; // ストキャスティクスの%K周期

input int D_Period=10; // %D ストキャスティクス周期

input int Slowdawn =8; // ストカスティック・スローダウン

入力色 clMainStoch =Yellow; // 主なストキャスティックラインの色

入力色 clSignalStoch =Red; // ストキャスティックシグナルラインの色

// -----グローバル変数の宣言: ----------------------------------------------

double MA_0, MA_1, MA_2; // 0、1、2本のバーのMA値

double MB_0, MB_1, MB_2; // 0, 1, 2 バーのボリンジャー平均の値

double ExtUpperBuffer[]; // ボリンジャーラインの上限の値

double ExtLowerBuffer[]; // ボリンジャーラインの下限値

double Delta_0, Delta_1; // ボリンジャーの上限値と下限値の差 ...

// ...0と1のバー上のボリンジャーライン

double Yellow_0, Yellow_1, Yellow_2; // 0, 1, 2小節のMAIN値

double Red_0, Red_1, Red_2; // 0, 1, 2 バーの値 SIGNAL

//-------Поехали!----------------------------------------------------------------

int start() //特殊関数スタート

{

//MAインジケータのファンクションコール

MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0)。

MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);

MA_2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2);

//ボリンジャーバンド機能へのフィードバック

MB_0=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,0)となります。

MB_1=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,1);

MB_2=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,2)となります。

Delta_0=iBands(ExtUpperBuffer[0]-ExtLowerBuffer[0]);

Delta_1=iBands(ExtUpperBuffer[1]-ExtLowerBuffer[1]);

//ストキャスティック関数呼び出し

Yellow_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,0).NULLを使用した場合。

Yellow_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,1).を使用。

Yellow_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,2);

Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0);

Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1);

Red_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,2);

//-------Ситуации по Стохастику:-----------------------------------------------------

//市場は買われすぎている

double MOB()=(Yellow_0>=80 && Red_0>=80); //ローカル変数

//市場は売られすぎている。

double MOS()=(Yellow_0<=20 && Red_0<=20); //ローカル変数

//市場は正常です。

double MN()=(20<Yellow_0<80 && 20<Red_0<80); //ローカル変数

/危機的状況

double MC1()=(20<Yellow_0<80 && Red_0<=20); //ローカル変数

double MC2()=(20<Yellow_0<80 && Red_0>=80); //ローカル変数

double MC3()=(20<Red_0<80 && Yellow_0<=20); //ローカル変数

double MC4()=(20<Red_0<80 && Yellow_0>=80); //ローカル変数

//-------Example(my)order to open position-----------------------------------------------------


if (Delta_0 > Delta_1 && MOB()==true) //市場は買われすぎだが、デルタは拡大中。

{ if (MB_2 > MB_1 && MB_1 < MB_0) //ボリンジャー下限ブレイク

オーダーセンド(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*ポイント,Bid+1500*ポイント);//買い注文をオープン

Alert("GetLastError()); //エラーのメッセージ

Alert("オープンポジション BAY with lots("Lots"),price("Ask")."); //買いメッセージ

 

また、BAY(売りも同様)ポジションは異なる条件で建てることができ、建てた条件(例えばBAY)により、異なる終了条件が存在することになります。(例:BAY)の場合、異なる終了条件があります。

MKLでどのように翻訳すればよいですか?

 
rapid_minus:

また、BAY(売りも同様)ポジションは異なる条件で建てることができ、建てた条件(例えばBAY)により、異なる終了条件が存在することになります。(例:BAY)の場合、異なる終了条件があります。

MKLでどのように翻訳すればよいですか?

ループの中で順番に選択して いきます。買いであり、他のデータ(シンボル、マジックなど)が「カスタムクローズ条件」でクローズすべきとの基準を満たす場合、「カスタムクローズ条件」が存在すれば、クローズすることになります。
 
artmedia70:
ループの中で順番に選択していきます。もしそれが買いであり、他のすべてのデータ(シンボル、マジック、何でも)が「適切な終値条件」でクローズしなければならないという基準を満たすなら、「適切な終値条件」があればそれをクローズするのです。

ちょっと漠然としていますが、少し調べたらわかると思います。ソ連邦の同志のように、背を向けて知識の高さから説教をしないことに、心から感謝します。

このように閉じる方法を考えました。

//----- バインドクローズでポジションをオープンする注文の例(チケットによる)-----

//BAY注文を開くローカル変数(63行目のかわりに)

int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point))である。

//------すると、この特定のオーダーに対するクロージャは、次のようになる可能性があります。

if (Ticket_1()==true) //注文番号1が開かれていた場合。

{ if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //黄色が赤より高い、収縮(condition)

{ if (MA_2 < MA_1 && MA_1 > MA_0);}.//真ん中より上の赤(条件)

else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //赤より黄色が上, 展開(condition).

{ if (MB_2 < MB_1 && MB_1 > MB_0);}.//ボリンジャー上限ブレイク(条件)

bool Ans=OrderClose(Ticket,Lot,Bid,0); //...決済注文(ロック)変数)

Alert("Attempting to close order with Bid("Lots"),price("Ask").").返信を待っています...")。

if (Ans==true) // うまくいきました :)

{

アラート("Close BAY order by lot("Lots"),Closing price("Bid")");

break; //位置決め終了 ループから抜け出す

}


}

前の記事についても、よく分析してください。頑固で申し訳ないのですが、ほら~、あなたしか返信してくれないから・・・。ありがとうございました。

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия (по тикету)----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ(вместо строки 63)
   int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (Ticket_1()==true)                              //Если был открыт ордер №1, то...
     { if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //Желтая выше красной, сужение(условие)
        { if (MA_2 < MA_1 && MA_1 > MA_0);}                      //Верхний перелом Средней (условие)
       else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Желтая выше красной, расширение(альтерн.условие)
         { if (MB_2 < MB_1 && MB_1 > MB_0);}                      //Верхний перелом Боллинджера (условие)
       
       bool Ans=OrderClose(Ticket,Lot,Bid,0);          //...закрытие ордера (лок.переменная)                                               
   Alert("Попытка закрыть ордер БАЙ лотом("Lots"),цена("Ask"). Ожидание ответа..");
   if (Ans==true)                                     // Получилось :)
        {
         Alert ("Закрыт ордер БАЙ лотом("Lots"),цена закрытия("Bid");
         break;                                       // Выход из цикла закрытия позиции
        }

     }
とても読みやすくなりました。すみません。
 
rapid_minus:

ちょっと漠然としていますが、少し調べたらわかると思います。ソ連邦の一部の同志のように、知の頂点から目を背けたり、説教したりしないことに、とても感謝しています。

こうやって閉じようと思ったんです。

...

前の記事に関しても、分析をお願いします。しつこくてすみません、でもほら、あなたしか答えられないから...。ありがとうございました。

まあ、ちょっと霞んじゃいますよね。

1.買い注文を決済するための条件発生の事実を判断する必要があります。

2.このサイクルでは、すべてのオープンポジションを確認し、必要な買い注文が見つかったら、それをクローズします。

これはサイクルの一例です。

void ClosePositions(string symbol, int type, int magic) {
   for(int i=OrdersTotal()-1; i>=0; i--) {      // цикл по открытым ордерам
      if(OrderSelect(i,SELECT_BY_POS)) {        // выбираем ордер по индексу
         if(OrderMagicNumber()!=magic) continue;// если магик не искомый - ищем дальше
         if(OrderSymbol()!=symbol)     continue;// если символ не тот - ищем дальше
         if(OrderType()!=type)         continue;// если тип ордера не тот - ищем дальше
         // здесь, если ордер выбран, то он соответствует нужным критериям,
         // вызов функции закрытия выбранного ордера по тикету
         }
      }   
   }

例えば、現在のシンボル(Expert Advisorが動作しているチャート上)で、マジックナンバー100500(例)の買い注文を決済するには、次のように関数を呼び出します。

ClosePositions(Symbol(),OP_BUY,100500);

100500という数字を書く必要はありません。通常、EAではマジックナンバーはすでに変数に設定されています。例えば、int Magic = 100500; ならば、100500の代わりにMagicと書く必要があります。

チケットに従って注文をクローズする関数を呼び出すべきで、選択したポジションをクローズするループには何も書きませんでした。これは通常、トレードサーバーのリターンコードが 処理されたフル関数の呼び出しです。そこに選択された注文を閉じる簡単なコマンドを書くことができます OrderClose()で確認します。

 
rapid_minus:
その方が読みやすいんです。すみません。

また、重複を避けるため、古い投稿を編集することも可能です ;)

 
evillive:
重複を避けるために、古い投稿を編集することは可能です ;)
しようとしたが、SRCはもう入れてくれない。
 
artmedia70:

ちょっと霧がかかっていますね。

1) 買い注文を決済する条件が発生したことを判定する。

2.ループの中で、すべてのオープンポジションを確認し、必要な買い注文が見つかったら、それをクローズします。

これはサイクルの一例です。

例えば、現在のシンボル(Expert Advisorが動作しているチャート上)で、マジックナンバー100500(例)で買い注文を決済するには、次のように関数を呼び出します。

100500という数字を書く必要はありません。通常、EAではマジックナンバーはすでに変数に設定されています。例えば、int Magic = 100500; ならば、100500の代わりにMagicと書く必要があります。

チケットに従って注文をクローズする関数を呼び出すべきで、選択したポジションをクローズするループには何も書きませんでした。これは通常、トレードサーバーのリターンコードが処理されたフル関数の呼び出しです。そこに選択された注文を閉じる簡単なコマンドを書くことができます OrderClose()で確認します。


ありがとうございます。しかし、私が理解した限りでは、注文を開くときに自動的にマジックが割り当てられるようです。したがって、私はどのような条件で注文が開始され、どのような条件で注文が終了すべきかを判断することができません。