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

 
matrixebiz:
私はこのようにすることで同じことをしていないのでしょうか?

if (Hour() 17) TradeHour = false;

つまり、時間が12から17の間であれば、TradeHour=true ということですね?

(Buy/Sellステートメントに && TradeHour を追加)

という記述を否定しています。

if(Hour()>=12 && Hour()<17)

TradingEnabled=true;

[/CODE]

is

[CODE]

if(Hour()=17)

TradingEnabled=false;

 

もう一つ、 どうすれば再入力の遅延をコードに追加できますか。そうすれば、取引が開始されて終了した場合、60分ほど待ってから、取引条件がまだ満たされているかどうかを再度確認 することができます。

ありがとうございます。

 
matrixebiz:
もう一つ、 どうすれば再入力遅延をコードに追加できますか。そうすれば、取引が開始され、終了した場合、60分ほど待ってから、取引条件がまだ満たされているか再度チェックすることができます。ありがとうございます。

お客様のご要望が明確ではありません。

取引条件のチェックと 次のチェックの間に60分間待ちたいのでしょうか?

もしそうであれば、この方法でうまくいくはずです。

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

 
gorgoroth:
あなたの要求が何であるかは明らかではありません。

取引条件のチェックと次のチェックの間に60分待ちたいですか?

もしそうなら、この方法でうまくいくかもしれません。

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

いいえ、取引が行われ、決済された後、EAに1時間待機してもらい、取引条件がまだ満たされているかどうかをチェックして もらいたいのですが、もし満たされていれば、OKで、そうでなければ、また取引してください。このコードは私が望むことを行うのでしょうか?テスターではTimeCurrentのチェックのため、このコードは動作するでしょうか?

EDIT: 毎時間ではなく、トレードが終了した直後にチェックを行い、1時間後に条件チェックを行う、それだけです。そして、一日のうちに別の取引が発生し、決済されたら、また1時間待ち、シグナルがなければ、次の取引のオープンとクローズまで、それ以上チェックを待つことはありません。

ありがとうございます。

あなたが私が言及した右の設定でそれを修正することができれば、添付の小さなEAです。ありがとうございます。

ファイル:
ozfx_method.mq4  11 kb
 

Buy_LimitとBuy_Stopについて

Limit注文とStop 注文の違いは何ですか?

ありがとうございます。

 
gorgoroth:
皆さん、こんにちは。

EAからコンフィギュレーション設定を管理するための一連の関数を開発しました。

これらの関数はc++のDLLによってエクスポートされ、エクスポートされた関数のそれぞれは、私のMQL4で要求された__stdcall呼び出しコンベッションを持っています。

私の問題は、ある関数がEAに文字列を返す必要があるときに起こります。

当然ながら、その関数は以下のようなことはできません。

- ローカル変数へのポインタを返す(変数がスコープ外になる)。

- Dllグローバル変数へのポインタを返す(同時アクセスに問題がある)

- ヒープに確保された文字列へのポインタを返す(EAから呼び出されるメモリを解放する関数が必要:この方法は好きではありません)。

ということで、EAから文字列と文字列サイズを渡すことにしました。Es:

string buffer;

GetString( buffer, 30 );

[/CODE]

and from the c++ dll, something like this

void __stdcall GetString( LPTSTR buffer, int BufSize )

{

// Read a string from a some source

....

// -1 to take into account the terminating null character

StringCchCopy( buffer, BufSize-1, ReadStringFromASource );

}

[/CODE]

Here starts the weird behaviour of MQL managing strings returned from a DLL.

using the following code:

string buffer;

GetString( buffer, 30 );

the first time buffer contains the right string. A first question arises: buffer is not initialized but after calling GetString it contains the string returned. I have to suppose that MQL allocates space for a string variable when it's declared.

Next time GetString() is called the string returned seems to be truncated to the length-1 of the previous string length and not resetted as expected because of the 'string buffer;' statement.

Tried even:

[CODE]

string buffer = " "; // 'allocate' 30 blank characters

GetString( buffer, StringLen(buffer) );

but after the first time, when the execution returns to this code, the assignment of buffer does not work any more and buffer still contains the previous read string, and it seems it can only contains the number of characters of his content.

At first I have thought that the null character is not handled very well by MQL and modified the c++ code like this ...

[CODE]

CopyMemory( buffer, ReadStringFromASource, min(BufferSize,ReadStringFromASourceLength) );

と、終端ヌル文字を追加しないようにしました。

しかし、MQLから呼び出された場合、文字列は全く返されません。

どなたか答えられる方はいらっしゃいますか?

DLLから文字列を返すのに問題がある人はいないのですか?

 

助けが必要です...

どなたか、私のEAに添付するコードを教えていただけませんか?

シグナルごとに1つの注文。時々、異なるTFのために3つのシグナルがあります。

または、バーごとに1つの注文を取るコードですが、各タイムフレームは1つのEAにアタッチされます...たくさんのチャートを開きたくないので...

 

私のBuyStopはどうなっているのでしょうか?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

 
matrixebiz:
BuyStop に何か問題があるのでしょうか?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

ストップロスとテイクプロフィット...

を追加する前に、距離にも*ポイントを追加する必要があります。

または

ビッド-((距離-ストップロス)*ポイント),アスク+((距離+テイクプロフィット)*ポイント))