MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 22

 
Artyom Trishkin:

О!ありがとうございます(苦笑)。朝、自分で気がつかなかった...。まだ、アレイを埋めるためのチェックが必要ですが。Quatermassで満たしていない、とファイブでかなり頻繁に過去のデータの不足の ために、最初の時間のデータを記入していない。

ZS もっと寝たほうがいい。思考がその方向に働く。

まあ、ループに入れればいいんですけどね

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

いやしくも

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

を、要求された量だけコピーする。


ps; お茶を入れに行ったついでに、CopyRates()と構造体の配列MqlRates rates[] を使うというアイデアもあったのだが、何かを書き直すのが億劫になってしまった。

 
Alexey Viktorov:

まあ、ループに入れるという手もありますが

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

いやしくも

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

をクリックすると、要求された部数だけコピーされます。


ps; お茶を飲んでいるときに、CopyRates()と構造体の配列MqlRates rates[] を使うという別のアイディアが浮かんだのですが、書き直すのが億劫になってしまいました。

私が提案した方法ではないのですか?
 
giannis1386:
他のSell条件を確認するのに役立つ。
int start()
{
//+--------------------------------------------------------------------+
//|   -= stop loss в без убыток =-                                      |
//+--------------------------------------------------------------------+
bool   result;
double stop;
int    cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}

妙な理屈があるものだ。でも、変な理屈は抜きにしても、では。

ここでは、「買い」の条件が2つ あり、それ以外はすべて「売り」の条件になっています。

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
 
Artyom Trishkin:

あなたの論理はおかしいです。でも、変な理屈は抜きにしても、では。

ここでは、2つの条件が 買い、残りが 売りの場合にチェックされています。

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;

売りの場合、slevel=OrderStopLoss()>Ask+Point*TSを 付けるようにしてみました

しかし、私はプログラミングの手がかりがないので、役に立つものは何も出てきませんでした。 1週間ほどフォーラムをつつきました。

なぜ変なロジックなのか?) コードは完全に私のものではありません。

 
giannis1386:

slevel=OrderStopLoss()>Ask+Point*TSを 追加しようとしたのですが

一週間ほどフォーラムを覗いてみましたが、すべての試みはSell Stopが価格と一緒に動いてしまうという結果に終わりました。

なぜ変なロジックなのか?) このコードはすべて私のものではない。 できるだけ手直しした。

まず、売りと買いのストップをずらすべき条件を書いてみてはどうでしょうか。

そして、考えた末に、伝票に書かれていることをコードに書いてください。

 
Artyom Trishkin:

そして、まず、紙に鉛筆でストップ買い、ストップ売りをずらす条件を書いてください。

そして、考えた末に、紙に書いてあることをコードに書き込んでください。

slevel=OrderStopLoss()>Ask+Point*TS; 売りポジションの場合はこの ようになります。
 
giannis1386:
slevel=OrderStopLoss()>Ask+Point*TS; まあ、これで合っているような気がします。 それとも間違っているのでしょうか? 初めて なものですから。

この状態で何が書かれているのか、理解できているのでしょうか?double 型の 変数に 0 または 1 を代入する。

何を手に入れたいですか?

 
Artyom Trishkin:

この状態で何が書かれているのか、理解できているのでしょうか?double 型の 変数に 0 または 1 を代入するものである。

何を実現したいのか?

校正はこんな感じです。

チェックコンディション - SLを前後に動かさず、一方向にのみ動かすこと。

例えば、BUY注文の場合、数式

OrderStopLoss()<bid-point*TrailingStop

この例を使って、セル用に作りました。

 
giannis1386:

以下は、私が読んだものです。

チェックコンディション - SLを前後に動かさず、一方向にのみ動かすこと。

例えば、BUY注文の場合、数式

OrderStopLoss()<bid-point*TrailingStop

この例で言うと、売りポジションの場合に貼り付けました。

だから、こんな風に必要なんですね。

ロシア語で...ストップオーダーがビッド価格からトレイリングストップディスタンスを引いた値より小さい場合、 ...こうどう

そして、この論理 式の結果、つまり0か1のどちらかを変数に代入するのです。

 
Artyom Trishkin:

だから、これが必要なんですね。

ロシア語で...ストップオーダーがビッド価格からトレイリングストップディスタンスを引いた値より小さい場合、 ...こうどう

そして、このブーリアン 式の結果、つまり0か1のどちらかを変数に代入するのです。

完全に混乱しています。

double blevel=OrderStopLoss()<Bid-Point*TS; works for me.SLは利益だけを考えて価格を追求する。

double slevel=OrderStopLoss()>Ask+Point*TS; これをelseに追加 する方法がわからない。

はboolではありません。