新参者の冒険 - ページ 11

 
niko:
ありがとう、CB、私はそれに気づくべきでした、それでエラーは最後(130)に正しかったのです。

その後、動作していますか?


CB

 

ヘイ、CB、それは取引を実行していますが、ロジックが正しくフォローされているかどうかを確認するために取引を詳しく調べていません(一見するとそう見えますが)。だから、今こそ「ありがとう!!」と言いたいです。)

このストラテジーが利益を生むようになるまでには、まだかなりの道のりがあります。コードはあくまで取引を自動化するためのものなので、ストラテジーそのものを改良するために私の方で少し作業をする必要があります。この努力は報われたように見えるが、私はまだコーディングに超困惑している。これからチャートにコメントを表示するコードを自作して、それをいじりながら関数などを 勉強していこうと思います。このCBでお世話になり、何度も同じことを聞いて、同じ間違いをする私に忍耐強く付き合ってくれたことに超感謝しています。ありがとうございました。

 
CB、この件で思い出したことがあります。同じ方向で2つまたは最大3つの取引を開くことができるように、あなたのコードに修正を加えるにはどうしたらよいでしょうか(これはあなたのコードのバージョン2のようなものです)。古いコードではOP_BUY/OP_SELLを使用していましたので、いくつかの点を変更する必要があります。もしあなたが「スケルトン」形式で何をすべきか教えてくれるなら(例:これをするための関数を作って...)、私はそれをコード化してみて、レビューのためにあなたに持ち帰ることができます。この方法は、あなたが自分でコーディングするよりも、あなたの論理に従うことができ、コーディングを学ぶことができるので、より良い方法です。どうでしょう?(外部変数に同じ方向に何回取引できるかを設定し、買いを計算する関数と売りを計算する関数を作り、start()でその二つの関数を呼び、そこで外部変数もチェックする...こんな感じでしょうか?
 

それは簡単です。

未決済注文の最大数を自分で設定する。頻繁に変更する必要がある場合は、それを外部化します。

それから、fnOrderDuplicate()関数を 変更することによって実装します。そうすることで、アプリケーションの既存のアーキテクチャを維持することができます。


CB

 
いつか、「そんなの簡単だよ」と言えるようになりたいものです。
 

ヘイ、CB。上の投稿であなたが尋ねたことをやろうと、もう2時間も費やしたよ。他のコードやドキュメントも見たけど、進展なし(何をしたらいいかわからない)。私は学習において何の進歩もないと感じているので、あなた方は親切にも私のためにすべてのコードを書いてくれています。


bool fnOrderDuplicate()
 {
  iDuplicateOrders = 0;                                  //setting orderdup to zero
  iOrders = OrdersTotal()-1;                             //iOrders returns market orders count - 1. So if zero orders, we get -1
  for (int i= iOrders; i>=0; i--)                         // the loop to cycle through total orders
   {
    OrderSelect( i, SELECT_BY_POS, MODE_TRADES);            //select order for function
    if ((OrderType() != OP_BUY) && (OrderType() != OP_SELL))      //if order is NOT op-buy and is NOT op-sell, sCurrentOrderType = other (ie no order)
     sCurrentOrderType = "OTHER";
    if (OrderType() == OP_BUY)                           //if order=buy, sCurrent OrderType = buy
     sCurrentOrderType = "BUY";                          //***7Jul09 ';' was missing at end of line
    if (OrderType() == OP_SELL)                          //***7Jul09: the end ')' was missing.
     sCurrentOrderType = "SELL";                         //if orderfound = sell, sCurrentOrder= sell
    if ((OrderSymbol() == Symbol()) && ( sCurrentOrderType == sSignal))  //if ordersymbolfortheorder= symbolforchart && ScurrentOrder = sSignal(fn_entryrules) 
        iDuplicateOrders++;                              //iDuplicateOrders is added 1
   }
  if ( iDuplicateOrders == 0)                             //if iduporders = 0 then fnOrderDuplicate = false, otherwise it's true.
   return(false);
  return(true);
 }
 
CBさん、上記の点、1方向で複数回取引するためのコードの修正方法について教えてください。
 
niko:
ねえ、CB、上記の点について何か助けがあるかしら、1方向に複数の取引をするコードを修正する方法は?

if (iDuplicateOrders== 0)if (iDuplicateOrders<= iMaxDuplicateOrders ) に変更するだけです。

CB

 

CBさん、ありがとうございます。このオプションでは、1つの方向で許可されるオープンオーダーの数を規制することができません(extern iMaxDuplicateOrders = 4; とすると、eaは4つのショートを実行し、パラメータを 均等に分配しません(例えば:最大2ショート、最大2ロング)。bool fnOrderDuplicateの複製(例:bool fnOrderDuplicateBuys、bool fnOrderDuplicateSells)を作成し、bool fnShouldWeTradeでそれぞれを参照するようにしてみましょうか?私の考えでは、これでうまくいくと思うのですが、いかがでしょうか?

 
niko:

CBさん、ありがとうございます。このオプションでは、1つの方向で許可されるオープンオーダーの数を規制することができません(extern iMaxDuplicateOrders = 4; とすると、eaは4つのショートを実行し、パラメータを均等に分配しません(例えば:最大2ショート、最大2ロング)。bool fnOrderDuplicateの複製(例:bool fnOrderDuplicateBuys、bool fnOrderDuplicateSells)を作成し、bool fnShouldWeTradeでそれぞれを参照するようにしてみましょうか?私の考えでは、これでうまくいくと思うのですが、どうでしょうか?


iMaxDuplicateOrders = 4に設定すると、カウンターを増分する前に方向をチェック するので、最大で各方向に4つの注文が出ることになります。


信用は信用するものです。この例では、その逆が正しいのです。申し訳ありません - あなたが自分で修正しなかったことに、私はすでに失望していました。必要だったのは、制限を1つのオーダーから変数に変更することだけでした。


注釈を見ると、あなたがロジックをよく理解せずに、単にコードを散文的に再作成していることは明らかです。


CB