どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 70

 

フォーラムユーザーの皆様へ

助けてください。問題は以下の通りです。1)どのようにコードで規定するか、例えば、売りで、チャンネルの上限に達したときに取引が開かれ、下限に達したときに閉じられるように、2)一つのシグナルが一つの取引だけを開くべき時、3)EAをインストールすると、取引がすぐに開かれるが、チャンネルのラインに達したときにだけ取引が開かれるようにしたい場合。

是非ともご協力をお願いします。

extern double Lots = 0.1;
extern int TakeProfit = 30; // TakeProfit(負の数またはゼロを使用しないようにする)。
extern int StopLoss = 20; // 買いのストップロス・レベル。
extern inttern Slippage = 2; // スリッページ
extern string Comment = "Keller";
extern inttern Magic = 333;

extern string Indi = "インジケーターデータ";
extern string TimeFrame = "現在のタイム フレーム;
extern int int MA_Period = 10; // 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int Mode_MA = 0; // 0 - Close, 1 - Open, 2 - High, 3 - Low, 4 - Median, 5 - Typical, 6 - Weighted
extern int Price_Type = 5;

double PriceHigh, PriceLow, SL, TP;
int ticketです。
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // 5桁のブローカーの場合
{
TakeProfit *= 10;
StopLoss *= 10;
スリッページ *= 10;
}
return(0)です。
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
int deinit()
{
return(0)です。
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
PriceHigh = iCustom (Symbol(), 0, "Keller", TimeFrame, MA_Period, Mode_MA, Price_Type, 0, 0); // レッドトップバッファ 0
PriceLow = iCustom (Symbol(), 0, "Tma", TimeFrame, MA_Period, Mode_MA, Price_Type, 2, 0); // 赤いボトムバッファー 2

if (Bid >= PriceHigh && CountSell() == 0) // Countsellでは、注文が各ティックごとではなく、1つずつオープンされることを確認する。
{
SL = NormalizeDouble (Bid + StopLoss * Point, Digits)です。
TP = NormalizeDouble (Bid - TakeProfit * Point, Digits)です。

ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Comment, Magic, 0, Red); // ここで0はSLとTP(ßnアカウントではこれが0)、最後の0はアクションです。
if (ticket > 0) // 未決済注文をチェックする
{
if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // ここで、0は式です。
}
}


if (Ask <= PriceLow && CountBuy() == 0)// Countsellは、注文が各ティックごとではなく、1つずつオープンされることをチェックする場合。
{
SL = NormalizeDouble (Ask - StopLoss * Point, Digits)です。
TP = NormalizeDouble (Ask + TakeProfit * Point, Digits)です。

ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Comment, Magic, 0, Blue); // ここで0はSLとTP(ßn口座ではこれが0)、最後の0はアクションです。
if (ticket > 0) // 未決済注文をチェックする
{
if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // ここで、0は式です。
}
}


if (Bid >= PriceHigh && CountBuy() > 0) // 価格がチャンネルの上限に達し、注文数が0より多い場合。
{
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) // これが買い注文であるかどうかをチェックする。
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); // チャンネルの上限の境界で注文を閉じる。
}
}
}
if (Ask <= PriceLow && CountSell() > 0) // 価格がチャンネルの下限に達し、注文数が0より多い場合。
{
for ( i=OrdersTotal()-1; i >= 0; i--) // buyの変数定義なし
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if(OrderMagicNumber() == Magic && OrderType() == OP_SELL) // これが売り注文であるかどうかをチェックする。
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black); // チャンネルの下限の境界で注文を閉じる。
}
}
}

return(0)です。
}

//+------------------------------------------------------------------+
int CountSell()// チェック - 売り注文中の数
{
int Count = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect (trade, SELECT_BY_POS, MODE_TRADES)。
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
カウント++。
}
}
return(Count)です。
}
//+------------------------------------------------------------------+
int CountBuy()// チェック - 作業中の買い注文の数
{
int Count = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect (trade, SELECT_BY_POS, MODE_TRADES)。
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
カウント++。
}
}
return(Count)です。
}

 
スクリーンショットを追加する
 
artmedia70:

いいえ、そうではありません。あなたのコードをちらっと見て、「見ずに」と答えました。あなたのセリフ

- は、サイクルインデックス i に水平線の総数に等しい値を割り当てる。3個あれば、2個から0個までの周期は不明ですが、2個から0個までの繰り返しは3回だけとなります。


ええ、まあ...と、それこそ心配になるほどでした。特別な実験をしなくても、ただ観察しているだけで、他の物体がある状態でも動作したということです。

for(int i=ObjectsTotal(OBJ_HLINE)-1; i>=0; i--) 

そして、一見して正しく動作しているように見えました。しかし、まさにおっしゃるようなことに疑問があったのです。だからこそ、この点を明確にしたかったのです。

そして、皆さんのご意見で、私の思い込みが確認できてよかったです。関する確実性が達成されたとみなしてよい。

改めて、ありがとうございました。

 
bistreevseh:


私はカスタムインジケータを持って、それはヒストグラムであり、すべての値は最大であり、それはヒストグラムのバーの色のみを問題として、それは入力パラメータを持っていない、バッファ2:0 - 赤いバーと、1 - 青いバー、私は帝国メソッドによって発見した、0バッファで、値を変更しないと1変更することです。トランザクションの基準の書き方がよくわからないのですが、説明してください、よろしくお願いします。


インジケーターのソースコードがあれば、難しいことはありません。ソースコードを見て、インジケーターの色が変わる条件を見つければいいのです。それを使って、信号を形成する。バッファの値が変化する条件を分析するための「ラッパー」を作成し、その際にインジケータコードは変更せず、iCustom()を使用 する方法と、インジケータコードをExpert Advisorから呼び出せる関数に変換する方法の2通りがあります。いずれの方法も、ホームページの記事で紹介しています。

例えば、平滑化したHeikin-Ashiというインディケータに興味があれば、ウェブサイトに目を通してみてください。このインディケータについては、私の記憶では、アルゴリズムの正しさとシグナル分析の両方が議論されていました。そのコードはオープンで、コードベース(そこにはたくさんのものがあります)で公開されています。

もし、インジケータがユニークなもので、ソースコードがない場合、問題はもっと複雑になります。リバースエンジニアリングですが、これは必ずしも努力を正当化できるものではありません。

 
VladislavVG:

インジケーターのソースコードがあれば、難しいことはありません。ソースコードを見て、インジケーターの色が変化する条件を探します。それを使って、信号を形成する。2つの方法があります。1つ目は、バッファの値が変化する条件を分析するための「ラッパー」を書くことで、インジケータコードは変更せず、iCustom()を使用する方法、2つ目は、インジケータコードをエキスパートアドバイザから呼び出せる関数に変換する方法です。いずれの方法も、ホームページの記事で紹介しています。

例えば、平滑化したHeikin-Ashiというインディケータに興味があれば、ウェブサイトに目を通してみてください。このインディケータについては、私の記憶では、アルゴリズムの正しさとシグナル分析の両方が議論されていました。そのコードはオープンで、コードベース(そこにはたくさんのものがあります)で公開されています。

もし、インジケータがユニークなもので、ソースコードがない場合、問題はもっと複雑になります。リバースエンジニアリングですが、これは必ずしも努力を正当化できるものではありません。


ありがとうございます、試してみます。検索クエリに解釈できないので、「ラッピング」と「インジケータコードの変換」に関する記事を探すのにご協力いただけないでしょうか。
 
助けてください。前日の高値・安値のラインを描画 するインジケーターです。毎日、歴史に線を引くのに必要なんです。ありがとうございます。
ファイル:
line.mq4  3 kb
 
prom18:
助けてください。前日の高値・安値のラインを描画するインジケーターです。毎日、歴史に線を引くのに必要なんです。ありがとうございます。
ファイル:
line_1.mq4  3 kb
 
bistreevseh:

ありがとうございました、試してみます。検索クエリに解釈できないので、「ラッパー」とインジケータコードの変換に関する記事を探すのを手伝っていただけませんか。


https://www.mql5.com/ru/forum/114117 以下は、インジケーターのシグナルを解釈するラッパー関数を作成する例です。

は、インジケーターコードの使用に関する記事です。

https://www.mql5.com/ru/articles/1456

https://www.mql5.com/ru/articles/1457

 
Vinin:



ありがとうございました。
 
VladislavVG:


https://www.mql5.com/ru/forum/114117 以下は、インジケーターのシグナルを解釈するラッパー関数を作成する例です。

は、インジケーターコードの使用に関する記事です。

https://www.mql5.com/ru/articles/1456

https://www.mql5.com/ru/articles/1457


あらためて、ありがとうございました。