[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 37

 
skyjet:

ご回答ありがとうございました。それにしても、Ask[0],Bid[0]に続く未来のバーをどう表現すればいいのでしょうか。

このフューチャーバーが表示されるとすぐにゼロになります。そして、現在[0]であるバーが[1]になります。


AskとBidは配列ではなく、現在の値は1つだけで、過去の値はすべて忘れ去られます。

 


私の推定預金は、すべての注文が完全にロックされているときにのみ、端末
と正確に一致するので、預金の計算を理解するために私を助けてください
. 私は注文のシステムにもう一つの順序を追加するとき - 預金
端末の結果は常に私の推定預金から非常にわずかに異なる
しかし、私は決して弾丸になることはできません!
ここでは、ごく短い例を紹介します。

この口座には10.00ロットずつの注文が4件あり、そのうち2件はバイク
、2件は売りです。口座の残高があり、すべての注文がロックされていることは明らかです
各注文の標準預金を計算し、4で割るとすべてが先細りです
端末が正確にノックします。

1.4059で1.00ロットでもう一回バイキを入れます
保証金を計算します。そのために、既存のすべての注文が箱に入っているので、標準的な預金
を支払わなければならないことは明らかである。
レバレッジ 1:100 の場合、新しい自転車の誓約書

ZALBuy = 140.59*1.00 = 140.59 となります。

したがって、以前の保証金をこの金額だけ増やす必要があります。
以前の保証金と、今回の1.00バイトの保証金を足す

ZAL=ZALold + ZALBuy = 1407.23 + 140.59 = 1547.82

ターミナルでバイを設定した後、預金は1547.91であることが判明
私はバイを置く場合、これは許容されるだろう
為替レート1.4068でより高い9ポイント。我々は預金の実質増加
前後の預金の差として計算する場合、我々は正確にレート1.4068で1.00ロットの標準預金
得るために。

1547.91 - 1407.23 = 140.6801

ターミナルのバージョンを変更しましたが、残念ながら役に立ちませんでした

-----------------------------------------------


あなたの時間を取るために私を許してください、しかし、これらの
一定の小さな不一致は本当に私を悩ます
私のマシンは、異なるオプションをカウントし、
とバランスと利益としての預金は、それらが実装される前に特定のアクションの後に
すべてのアカウントのパラメータを 計算するために使用されます。 だから精度はここで非常に望ましいです。
私が何か理解していないのかもしれませんが、ドキュメント
を検索しても、この不一致の理由を見つけることができませんでした。
是非ともご協力をお願いします。


MADZXについて
 
keep87:


この設定は忘れても大丈夫です。再引用は、食堂がお金を取りたいなら、隙間など気にせず、とにかくやるということです(笑)。これが、「最高のブローカーXXXXX」(XXXXXX - 大陸や銀河の名前を入れてください)と名乗る詐欺会社のほとんどのアルゴトレードの現実です。

設定を変えても変えなくても、すべては変わらない。


全くその通りです!私も見ましたよ。
 
skyjet:
こんにちは!本物のバー+1の説明をお願いします。例えば、私は現在のバーではなく、次のバーの価格が必要です。

私の理解では、あなたは未来から機械から情報を得ようとしているのです
もし方法が見つかったら、教えてください。)
 
Kobalerro:
皆様にご挨拶申し上げます。私自身プログラミングは初めてなので、問題を解決してください。

同一口座で複数のEAを利用する場合は、注文数を限定して開設する必要があります。

例:10個のEAがあるが、注文は5個まで、ただし1通貨ペアにつき1個までとする。

これは、以下のように実装されていますが、そのように動作するわけではありません。

extern int МаксКолОрдеров   = 5;

//+------------------------------------------------------------------+

int ПодсчетОткрОрдеров() {
  int k=OrdersTotal();
   if (Символ=="0") Символ=Symbol();
    for (int i=МаксКолОрдеров; i<k; i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Символ || Символ=="") {
       if (МагикНомер<0 || OrderMagicNumber()==МагикНомер) {
      if (OrderMagicNumber()<1) return(True);
     }
    }
   }
  }
 return;

}

//+------------------------------------------------------------------+
int start()
  {
   if(ПодсчетОткрОрдеров()==0)ПровТоргУсловий();
   }


私は次のようにそのようなショーを実装します:
あなたの馬のすべての10は、隣接する部屋にあるかのように、独自のスケジュールでそれぞれ働いている
したがって、それらのどれも壁の後ろに何をしている隣人を知らない - これは主な問題です
あなたのアイデアのための!?
そこで、各EAに自分の行動をディスクファイル
に書き込むように指示する。これは、ターミナルのディレクトリにあるため、すべての馬が利用できるようになる。
もし、自分のウィンドウに何か作りたいという熱い思いを持っている人がいたら、
まずこのファイルを分析し、
願望を実現する可能性をチェックしてみてください !
あなたのシナリオに関連して、あなたは注文の数を ファイルに追加する必要があります
そして、それらが開いている通貨ペア
例えば:
EURUSD 1
GBPUSD 1
EURGBP 0

ここでは、EURUSDとGBPUSDで 取引を開始できないことがわかります。これは、スクリプトが、
、1つのペアで複数の注文を持つことを許可しないためです。
、作業中のペアの数だけ行があることは明らかです。
このソリューションにより、すべての馬は常にその瞬間に何が起こっているかを認識することができます。
、その瞬間に何らかのアクションが許されるかどうかを計算することができるようになります。
どのペアでも注文を出すときは右の行に1を入れる
決めるときは0に置き換える
初心者には少し複雑ですが、これは間違いなくうまくいきます
. でも、みんないたから行ってみてください!時が来るまで初心者のようなものです。

よい狩りを!
MADZX

 

私はプルバック戦略を書いています。対応するローソク足の極値より上(下)に逆指値注文を出す必要があるのですが。以下はその一例です。

それは、終値がオープンの下にある場合、それは弱気のキャンドルであり、その逆 - 強気のキャンドルであることは明らかである。直前のローソク足が強気である、という条件を作る方法を知りたいのですが...。...そうそう

論理的には、キャンドルの種類を判断する関数を作ります。

int CandleType()
{
  if(Open[1] > Close[1])
    return(BullCandle);
    
  if{Open[1] < Close[1]}
    return(BearCandle);
    
  return(dodji);
}

それなら、指数1のバーが強気なのか弱気なのか、なんとなく聞いてみたほうがいいのでは...。...し、何かをする...

どうすればいいのでしょうか?

 
madzx:


私はこのようなショーを実装します:
あなたの馬のすべての10は、隣接する部屋にいるかのように、独自のスケジュールでそれぞれ働いている
したがって、それらのどれも壁の後ろに何をしている隣人を知らない - これは主な問題です
あなたのアイデアのための!?
そこで、各EAに自分の行動をディスクファイル
に書き込むように指示する。これは、ターミナルのディレクトリにあるため、すべての馬が利用できるようになる .
もし、自分のウィンドウに何か作りたいという熱い思いを持っている人がいたら、
まずこのファイルを分析し、
願望を実現する可能性をチェックしてみてください !
あなたのシナリオに関連して、あなたは注文の数をファイルに追加する必要があります
そして、それらが開いている通貨ペア
例えば:
EURUSD 1
GBPUSD 1
EURGBP 0

ここでは、EURUSDとGBPUSDで 取引を開始できないことがわかります。これは、スクリプトが、
、1つのペアで複数の注文を持つことを許可しないためです。
動作中のペアの数だけラインが存在することは明らかです。
このソリューションにより、すべての馬は常にその瞬間に何が起こっているかを認識することができます。
、その瞬間に何らかのアクションが許されるかどうかを計算することができるようになります。
どのペアでも注文を出すときは右の行に1を入れる
決めるときは0に置き換える
初心者には少し複雑ですが、これは間違いなくうまくいきます
. でも、みんないたから行ってみてください!時が来るまで初心者のようなものです。

よい狩りを!
MADZX

ありがとう、でもちょっと複雑すぎるわね。そして、あなたのバージョンでは、すべての動作が判明し、入力のための条件を確認するために10を取ります。

最初にできた5つだけを開き、そのうちの1つが閉じると、条件に合った最初の1つがまた開くという仕組みだ。

EURUSD 1 , GBPUSD 1 , EURGBP 0 に限定されるものではない。

もっとシンプルな解決方法があるはずだと思うのですが。与えられたパラメータによる制限条件を持つ注文の 総数をカウントするのと同じようなものでなければならない。

そして、その制限は記号か1以下のマジックナンバーで設定することができます。

しかし、あなたのバージョンもおそらく動作すると思いますが、コードでどのように実装するか決めかねています。

 
hoz:

不思議なことがあるんです。ここでは、オープニングオーダーの機能を紹介します。

がエラーになります。

if(SL < g_stopLevel)
    SL = g_stopLevel*pt;

ストップレベル=5であれば、0.00005にストップロスを置こうとしていることになります。

2つ目のエラーは、注文を出す場所を確認していないことです。 もしローソク足がその高値安値付近で閉じたら、エラー130が発生します。 画像にあるように、現在の価格より高いか同じ価格で売り注文を出そうとしたので、サーバーはセルストップではなく、売り注文を開きました。

プリントの使い方を覚える適切な場所にPrint();を置き、必要な変数を括弧で囲み、これで区切るだけです。Print(Price," ",SL); そして、「エキスパート」タブで注文を開く瞬間に、これらの変数が何に等しいかを確認し、何が間違っているのかを理解することができます。

また、ログにはEAが何をしようとしているのか、ストップロスやテイクプロフィットをどこに設定するのかが表示されます。そこには、必要なものがすべて揃っています。

論理的には、ロウソクの種類を検出する関数を作ります。

関数startの内部で作業してみましょう。

まず、直前のローソク足の方向を書き込む変数を作成します。

int Candle=-1;

1は強気、もう1つは弱気を表す値で埋められます。 1の場合は何もありません(決定されていない、または方向性がない close=open)。

取引注文に例えて、0-買い、1-売りの値を提案します。

というのであれば、書く必要があります。

if(Close[1]>Open[1]) Candle=0; else
if(Close[1]<Open[1] Candle=1)です。

これで方向が定義できたので、OrderSend( string symbol,int cmd, ...other stuff...)関数で 直接使用することができます。

if(Candle!=-1) OrderSend( Symbol(),Candle,...other stuff...)とする。

またはあなたの例えに従う。

if(Candle==0) OpenBuy();
if(Candle==1) OpenSell()

 
Kobalerro:

ありがとうございます、でもちょっと複雑すぎますね。そして、あなたのバージョンではすべて動作することが判明し、入力条件の確認に10を要するようになったのです。

で、間に合った5つだけを先に開き、そのうちの1つが閉じると、条件に合う最初の1つがまた開くという仕組みになっています。

EURUSD 1 , GBPUSD 1 , EURGBP 0に限定されない。

もっとシンプルな解決策があるはずだと思うのですが。与えられたパラメータによる制限条件を持つ注文の総数を数えるようなものでなければならない。

そして、この数を記号かマジックナンバーで、あるいは1つ以下に制限する必要があります。

しかし、おそらく、あなたのバリアントも動作しますが、どのようにコードでそれを実装するために、私は考えることはできません。


あるいは、こんな感じでしょうか。

if(NumberOfPositions("EURUSD")==0 && NumberOfPositions()<10)
以下はその機能 です。
 
keep87:

ここでエラーになります。

ストップレベル=5であれば、0.00005にストップロスを置こうとしていることになります。

2つ目のエラーは、注文を出す場所を確認していないことです。 もしローソク足がその高値安値付近で閉じたら、エラー130が発生します。 画像にあるように、現在の価格より高いか同じ価格でセルストップを開こうとしたため、サーバーはセルストップではなく、売り注文を開きました。

プリントの使い方を覚える適切な場所にPrint();を置き、必要な変数を括弧で囲み、これで区切るだけです。Print(Price," ",SL); そして、「エキスパート」タブで注文を開く瞬間に、これらの変数が何に等しいかを確認し、何が間違っているのかを理解することができます。

また、ログにはEAが何をしようとしているのか、ストップロスやテイクプロフィットをどこに設定するのかが表示されます。必要なものはすべて表示されます。

私も時々そのように使っています。ほら、これで関数はこうなった。

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  int ticket = -1;
  string myNote = "Сов баянул";
  
  double price = High[1] + i_thresholdFromInput*pt;
  Print("price = ", price);
  double SL = Low[1] - i_thresholdFromBasedSL*pt ;
  Print("SL = ", SL);

  if(price > Ask)
  {
    ticket = OrderSend(Symbol(),OP_BUYSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,TimeCurrent() + 600,Navy);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(High[1] + i_tp*pt,Digits),0,Navy))
    return(false);
  
  return(true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell()
{
  int ticket = -1;
  string myNote = "Сов шортанул";
  
  double price = Low[1] - i_thresholdFromInput*pt;
  Print("price = ", price);
  double SL = High[1] + i_thresholdFromBasedSL*pt;
  Print("SL = ", SL);
  
  if(price < Bid)
  {
    ticket = OrderSend(Symbol(),OP_SELLSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,TimeCurrent() + 600,Red);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(Low[1] - i_tp*pt,Digits),0,Red))
    return(false);
    
  return(true);
}

日誌で読みました。

2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: modify #1 buy stop 0.10 EURUSD at 1.32103 sl: 1.32007 tp: 1.32243 ok
2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: open #1 buy stop 0.10 EURUSD at 1.32103 ok
2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: SL = 1.3201
2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: price = 1.321
2012.12.25 18:20:14     2012.02.13 00:00  5_minites_TS_by_Philippe Nell EURUSD,M5: OrderSend error 130
2012.12.25 18:20:14     2012.02.13 00:00  5_minites_TS_by_Philippe Nell EURUSD,M5: SL = 1.3194
2012.12.25 18:20:14     2012.02.13 00:00  5_minites_TS_by_Philippe Nell EURUSD,M5: price = 1.3204
2012.12.25 18:20:14     5_minites_TS_by_Philippe Nell inputs: i_fastMaPeriod=10; i_slowMaPeriod=21; i_filtrMaPeriod=50; i_trading_TF=5; i_thresholdFromInput=1; i_thresholdFromBasedSL=1; i_slippage=3; i_tp=15; i_myMagic=33330215; 
2012.12.25 18:20:12     5_minites_TS_by_Philippe Nell EURUSD,M5: loaded successfully

つまり、当初は買い値からストップまで1.3204 - 1.3194 =0.001 ポイントの 差があったのです。

さらに1.3210 - 1.3201 =0.009

そして、2件目ではなぜかストップがエントリー価格に近づいていたのですが、エラーは出ませんでした考えてみても、よくわかりませんでした。

後日、別の方法で訂正しました。コードにはすでに条件があります。

if(price > Ask) && if(price < Bid) それぞれ買い、 売りの場合。それとも別のバリエーションがあったのでしょうか?これでエラーは出なくなりました。しかし、それでも、より経験豊富なプログラマーの 意見を聞いてみたい。