コーディングの方法は? - ページ 324

 
mladen:
説明するのは簡単ではありません。

オフラインのチャートにイベントを送り、新しいティックが発生したことと、必要なルーチンを実行することを(あなたのインジケータから)「伝える」必要があるのです。これは、低レベルの関数を使うことを意味します。全体はこのような感じになります。

#include

#import "user32.dll"

int GetParent(int hWnd);

#import

#define CHART_CMD_UPDATE_DATA 33324

void UpdateChartWindows()

{

int filePeriod = 1; // file period

string fileSymbol = "your offline symbol name";

string chartName = "your offline symbol chart full name";

string stringForName = " ";

//

//

//

//

//

int windowHandle = WindowHandle(fileSymbol,filePeriod);

if (windowHandle != 0)

{

windowHandle = GetParent(windowHandle);

windowHandle = GetWindow(windowHandle,GW_HWNDFIRST);

while (windowHandle != 0)

{

int len = GetWindowTextA(windowHandle,stringForName,80);

if (len > 0 && StringSubstr(stringForName,0,len) == chartName)

PostMessageA(windowHandle,WM_COMMAND,CHART_CMD_UPDATE_DATA,0);

windowHandle = GetWindow(windowHandle,GW_HWNDNEXT);

}

}

}

ありがとうございます、確認して みます。しかし、私はsendorderのための問題を正しく見つける。私のインジケータはオフラインチャートに非標準の名前を作成し、プラットフォームはこの理由のためにそれを開くことはありません。

あなたの柔軟性に感謝します。

 

OK、オフライン・チャートの問題はうまくいっています。

もう一つ問題があります。

私は、特定のルールでボリュームを計算するインジケータを作成する必要があります。

必要なのは、ティックの変動があるたびに、インジケータがスイングの長さをカウントしなければならないことです。

オープンキャンドルの値バッファは 0です。だから、それはリトレースメントの前に行われたすべてのティックをカウントする必要がありますが、最終的な値は、キャンドルが閉じて以来、それの最高値です返されます。

その後、それはバッファから返された最高レンジの行われたmovemenetをreletatedヒストグラムの色を設定する必要があります。

私は別の方法で試してみましたが、成功しません。

Heeeeelp ^^。

ありがとうございます

 

皆さんのサポートに感謝します。私はもっと勉強し、皆さんの助けを借りて、私の要求をすべて解決しました...しかし。

私は別のものを持っている^^。

私はリコールするためにvoid関数を 作成する必要があり、それはこの2つのコードのマージでなければなりません。

1つ目は最後のopenorderを見つけること、2つ目はopenpriceが高いopenorderの数を見つけることです。

私は最高のopenorderpriceを持っている注文の番号を直接持っているための1つの関数を実行する必要があります。

ありがとうございます。

for(int i = OrdersTotal()-1; i>= 0; i--) {

OrderSelect(i, SELECT_BY_POS);

if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {

if(TYPE == OP_BUY) {

double OPrice = OrderOpenPrice();[/PHP]

[PHP]for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>test(OP_BUY) Hbuys++;

}

}

}

return(Hbuys);

}

 
dasio:
いつもありがとうございます。皆さんの協力で、私の要望を全て解決することができました...が。

もう一つあります^^。

この2つのコードをマージして呼び出すための void 関数を作成する必要があります。

1つ目は最後のopenorderを見つけること、2つ目はopenpriceがより高いopenorderの数を見つけることです。

私は最高のopenorderpriceを持っている注文の番号を直接持っているための1つの関数を実行する必要があります。

ありがとうございます。

for(int i = OrdersTotal()-1; i>= 0; i--) {

OrderSelect(i, SELECT_BY_POS);

if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {

if(TYPE == OP_BUY) {

double OPrice = OrderOpenPrice();[/PHP]

for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>test(OP_BUY) Hbuys++;

}

}

}

return(Hbuys);

}

2番目のコードでエラーになりました。それは正しいです

[PHP]for(int e=0;e<OrdersTotal();e++) {。

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>OPrice Hbuys++;

}

}

}

return(Hbuys);

}

 

ダシオ

void関数とは、値を返さない関数のことです。私の経験では、この目的のためにグローバルスコープの変数を使用することは、非常に悪い習慣です。それはあなたが考えていたことですか?

dasio:
2番目のコードでエラーになりました。それは正しいです
for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>OPrice Hbuys++;

}

}

}

return(Hbuys);

}

 
mladen:
dasio void関数は、任意の値を返すことはありません関数です。私の経験では、この目的のためにグローバルスコープの変数を使用することは非常に悪い習慣です - それは構造化されたコーディングルールを回避し、エラーを検索する必要がある場合、そのような変数が使用されている場合は悪夢です)。そのようなことを想定していたのですか?

ご回答ありがとうございます。

私は最後に開いた買い注文を基準にして、最も高いopenorderと最も低いopenordermを持つ買いの数だけが必要です。

私はいくつかのチェックのためのボイス関数に どのようにmoltiplierの結果を使用する必要があります。

だから、要求されたときに、このレコードを呼び出す方がはるかに簡単です。多分この方法で私はそれを呼び出すことができますので、単純にCalculateCurrentBuy(Symbol())。

int CalculateHighestbuy(string symbol) {

int Hopen=0;

for(int i=0;i<OrdersTotal();i++) {

code here

}

}

return(Hopen);

}

 

トレーリンググリッド?

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){

OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){

OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

}[/CODE]

I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.

[CODE] void TrailingOrders() {

if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {

if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);

}

}

if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {

if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);

}

}

}

このコードは2つの注文をトレールしますが、もっとトレールするためにはどのように修正したらよいでしょうか?上記のグリッドコードのように複数レベルのトレールコードを設定しようとすると、すぐにカスタードに変わってしまいます。

何かヒントがありましたら、よろしくお願いします。

CJAより

 

...

cja

以下のコードで試してみましたが、問題なく動作しました(サンプル画像参照:異なる手順が既に適用されています)。

s.ticketPとb.ticketPの変数が何のためにあるのか分からなかったので、コードにあるような方法で使いました。

extern double Trail.SELLSTOP.Orders.Distance = 15;

extern double Trail.BUYSTOP.Orders.Distance = 20;

extern int Stop.Order.Levels = 4;

extern double Sell.Lots = 0.1;

extern double Sell.Multiplier = 0.1;

extern double Buy.Lots = 0.1;

extern double Buy.Multiplier = 0.2;

extern bool Set.SELLSTOP = true;

extern bool Set.BUYSTOP = true;

int init()

{

return(0);

}

int start()

{

double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;

static int s.ticketP=0;

static int b.ticketP=0;

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}

}

s.ticketP=Stop.Order.Levels;

b.ticketP=Stop.Order.Levels;

return(0);

}

cja:
for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){

OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){

OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

}[/CODE]

I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.

[CODE] void TrailingOrders() {

if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {

if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);

}

}

if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {

if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);

}

}

}

このコードは2つの注文をトレールしますが、もっとトレールするにはどのように修正すればよいですか?上記のグリッドコードのように複数レベルのトレールコードを設定しようとすると、すぐにカスタードに変わってしまいます。

何かヒントがありましたら、よろしくお願いします。

CJAより
ファイル:
stopd.gif  36 kb
 

グリッドの末尾

mladen:
cja

以下のコードで試してみましたが、問題なく動作しました(サンプル画像参照:異なるステップが既に適用されています)。

s.ticketPとb.ticketPの変数が何のためにあるのか分からなかったので、コードにあるような方法で使用しました。

extern double Trail.SELLSTOP.Orders.Distance = 15;

extern double Trail.BUYSTOP.Orders.Distance = 20;

extern int Stop.Order.Levels = 4;

extern double Sell.Lots = 0.1;

extern double Sell.Multiplier = 0.1;

extern double Buy.Lots = 0.1;

extern double Buy.Multiplier = 0.2;

extern bool Set.SELLSTOP = true;

extern bool Set.BUYSTOP = true;

int init()

{

return(0);

}

int start()

{

double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;

static int s.ticketP=0;

static int b.ticketP=0;

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}

}

s.ticketP=Stop.Order.Levels;

b.ticketP=Stop.Order.Levels;

return(0);

}

こんにちは、mladen。

ご助言ありがとうございます。しかし、私の上記の投稿はあまり明確ではなかったかもしれません。私はグリッドを設定することに問題はありませんが、問題は順序の分離を失うことなくグリッドを追跡 することです。

s.ticketP と b.ticketP は単に EA の他の場所で使用されている BUYSTOP と SELLSTOP保留注文の コードを指します。

CJAより

 

トレイリンググリッド

cja:
こんにちは、mladenさん。

ご助言ありがとうございます。グリッドを設定することに問題はありませんが、問題は注文の分離を失うことなくグリッドをトレール することです。

s.ticketP と b.ticketP は単に EA の他の場所で使用されている BUYSTOP と SELLSTOP 保留注文のコードを指します。

CJAより

こんにちは、mladenです。

これを見る時間はありますか?

CJAさん、よろしくお願いします。