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

 

さて、最初の質問です。

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Magenta

extern int MAPeriod=200;

extern double iController = 1.386;

//---- buffers

//double Memory[200];

double ExtMapBuffer1[];

int limit = 200;

//---- variables

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

IndicatorBuffers(1);

//---- drawing settings

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

IndicatorShortName( "Antaria_Rising");

//---- initialization done

return(0);

}

int start()

{

int limit;

//ExtMapBuffer1[1] = ExtMapBuffer1[0];

//ExtMapBuffer1[0] = iController;

for(int i=(0); i<=(limit-1); i++)

{

ExtMapBuffer1 = ExtMapBuffer1;

}

ExtMapBuffer1[0] = iController;

return(0);

}[/CODE]

Above is the code for the indicator. Simply, it draws a line that should be updatable via the EA using the intiially mentioned code:

[CODE]temp = iCustom(NULL, 0, "AntariaRising", 200, 1.2, 0, 0); //temp not used. Function returns a double

私は、インジケーターオブジェクトにトラッキングしている変数を更新するための最後のコードを置き換えることを望んでいます。しかし、残りのコードは関係ありません。上記の関数を 実行すると、antariaは1.39またはそれが開始するものから1.2まで位置を移動することを期待します。200という変数を使ったかどうかは覚えていない。ヘッダーとフッターのコメントは削除しましたが、スレーブインジケーター全体はそこにあり、それはすぐ上のコードで意味されるAntariaRisingです。

これは、私が見つけることができた唯一のインジケータオブジェクトと話をする関数でした、そして、私は他の領域で値を読み取るためにそれを使用しています。

 

インジケーターコードについて。それは間違っています。

Var. limit equal zero ever.

文字列を削除してください。

int limit;

という文字列をstart()から削除してください。

 

このコードで私を助けるpls

私はそれが私がそれをしたいときに、このコードで私を助けるために誰かを望むが、私はそれが再び交差しないときに閉じていないストップロスで取引したいので、自動的にそれを閉じますこれは、コードです。

//+------------------------------------------------------------------+

//| JR300.mq4

///oneloveさん

///フォレックスフォーラム|フォレックスTsd|メタトレーダーフォーラム|</p

//+------------------------------------------------------------------+

#property copyright "oneLove" (ワンラブ)

#property link "https://www.forex-tsd.com"

//---- 入力パラメータ

extern double TakeProfit=250.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

//+------------------------------------------------------------------+

//| エキスパート初期化関数

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| エキスパート初期化関数

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //上方向

if(line1<line2)current_direction=2;//下方向

if(current_direction != last_direction) //変更されました。

{

last_direction = current_direction;

return (last_direction);

}

それ以外

{

return (0);

}

}

//+------------------------------------------------------------------+

//| エキスパートスタート機能

//+------------------------------------------------------------------+

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(テイクプロフィット<10)

{

Print("TakeProfitが10未満");

return(0); // TakeProfitのチェック

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0)とします。

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*ポイント,

"私のEA",12345,0,緑);

if(ticket>0)

{

if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

else Print("BUY注文の開始エラー :",GetLastError())。

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0.TakeProfit*Point)。

Bid-TakeProfit*Point, "私のEA",12345,0,赤);

if(ticket>0)

{

if(オーダーセレクト(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("SELL order opened : ",OrderOpenPrice());

else Print("SELL注文の開始エラー :",GetLastError());

return(0);

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()))

{

if(OrderType()==OP_BUY)// ロングポジションがオープン

{

// クローズすべきか?

if(isCrossed == 2)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

// ポジションを閉じる

return(0); // 終了

// トレーリングストップのチェック

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(オーダーストップ・ロス()<ビッド-ポイント*トレイリングストップ)

{

オーダー変更(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,Bid-Point)

ポイント*トレイリングストップ,OrderTakeProfit(),0,緑);

return(0);

}

}

}

}

else // ショートポジションに移動

{

// 決済するべきか?

if(isCrossed == 1)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet)を実行。

// クローズポジション

return(0); // 終了

// トレーリングストップのチェック

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)))をチェックします。||

(OrderStopLoss()==0))です。

{

オーダーモディファイ(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red)。

return(0);

}

}

}

}

}

}

return(0);

}

//+------------------------------------------------------------------+

 

これを試してみてください。

//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

//+------------------------------------------------------------------+

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

//+------------------------------------------------------------------+
 

感謝

Roger09:
これを試してみてください。
//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

//+------------------------------------------------------------------+

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

//+------------------------------------------------------------------+

roger09 ありがとうございます。

 

Rogerさん、ありがとうございます!私のstart関数から 2つ目のリミット宣言を削除しました。コンパイラがそれを許可していたことに驚きましたが、私のプログラムには目立った影響はなかったのです。

しかし、私のEAからそのインジケータの実行インスタンスを変更する方法がわかりません。APIが現在実行中のインジケータに情報を渡すことを許可していないことを確認するか、またはその方法が非常にありがたいです。

ありがとうございます。

 
yingli:
私はここにいくつかの助けを得るためにこのトレッドを開始します。私は添付の指標のためのコードを学習している.しかし、それはうまくいきませんでした。このインジケータはとても信頼できるもので、もし誰かがこのインジケータのEAを作ることができれば、それはほとんど聖杯のようなものです.tia.

基本的な流れは

1.open赤い矢印が表示されたときに位置を売っています。

2.白い矢印が表示されたら買いポジションをオープンし、自動的にすべてのTH ESELLポジション/ポジションをクローズします。

3.任意の時間枠に適用されます。

4.noストップロス。

5.add順序機能。

回答お待ちしております。

//+------------------------------------------------------------------+

//| IINWMARROWS.mq4||をベースにしたものです。

//| EMA_CROSS.mq4に基づいています。

|| Copyright ?2006, MetaQuotes Software Corp.|

//| フォレックス・トレーディング・ソフトウェアフォレックス・トレーディング・プラットフォーム MetaTrader4

|| 最終更新者:Iin Zulkarnain

//+------------------------------------------------------------------+

#property copyright "Copyright ?2006, MetaQuotes Software Corp."(コピーライト:2006年、メタクォーツ・ソフトウェア社)。

#property link "http://www.metaquotes.net"

//----

#property indicator_chart_window(インジケーターチャートウィンドウ

#property indicator_buffers 2 (インジケーターバッファー2)

#property indicator_color1 ホワイト

#property indicator_color2 赤色

#property indicator_width1 2 (幅)

#property indicator_width2 2 (インジケータ幅2

//----

double CrossUp[];

double CrossDown[];

extern int FasterMode=3; /0=sma, 1=ema, 2=smma, 3=lwma

extern int FasterMA= 3;

extern int SlowerMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

extern int SlowerMA= 3;

//+------------------------------------------------------------------+

//| カスタムインジケータ初期化関数

//+------------------------------------------------------------------+

int init()

{

//---- インジケータ

SetIndexStyle(0, DRAW_ARROW, EMPTY).SetIndexStyle(0)を設定します。

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY).を設定します。

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

//+------------------------------------------------------------------+

//| カスタムインジケータ初期化関数

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| カスタムインジケーターイテレーション関数

//+------------------------------------------------------------------+

int start()

{

int limit, i, counter;

double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;

double Range, AvgRange;

int counted_bars=IndicatorCounted();

//---- エラーの可能性をチェック

if(counted_bars<0) return(-1);

//---- 最後にカウントされたバーが再カウントされる

if(counted_bars>0) counted_bars--;

//----

limit=Bars-counted_bars;

for(i=0; i<=limit; i++)

{

counter=i;

Range=0;

AvgRange=0;

for(counter=i ;counter<=i+9;counter++)

{

AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);

Range=AvgRange/10;

fastMAnow=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);

fasterMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);

fasterMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);

//----

slowerMAnow=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i);

slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i+1); //------- slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i+1);

slowerMAafter=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i-1);

if ((fasterMAnow > slowerMAnow) && (fasterMAprevious・slowerMAafter))

{

CrossUp=Low - Range*0.5;

}

else if ((fasterMAnow slowerMAprevious) && (fasterMAafter < slowerMAafter))

{

CrossDown=High+Range*0.5。

}

}

return(0);

}

//+------------------------------------------------------------------+このスレッドは、正しいコーディングの仕方を学ぶためのものです。

このインディケータのアラートコードを誰か助けてくれませんか?

 

George's Oscar Calculator - 誰かインジケーターを作ってくれないかな?

こんにちは、皆さん。

ジョージ・スミスのForex Made-EZをご存知の方がいらっしゃるかどうか分かりませんが、現在彼の作品をレビューしています。

私は今、彼の作品を見直しているのですが、彼が使っているオスカーオシレーターのインジケータをコード化した人がいるのでしょうか?

計算式は

A = 過去8本の最高値(この1本を含む)

B = 過去8本の安値(この1本を含む)

C = 現在のバーの終値

X = 前回のオシレータ値(オスカー)

今日のオシレーターは、(C-B)を(A-B)で割って100を掛けたものになります。

次に、この大まかな数値(Yと呼ぶ)を次のように「平滑化」します。

最終的なオシレータの数値 = ((X÷3) × 2) + (Y÷3).

どなたか、これをコード化したことのある方、あるいはコード化できる方がいらっしゃいましたら、ぜひ教えてください。

スティーブ

 

インバーテッド・トレーリングストップ

こんにちは。

あるアイデアについて教えてください。

私は自分のEAでトレーリングストップ(3ステップトレーリング)を使っていますが、損失を防ぐために反転させたいと考えています。

説明します。

私は最初のストップロスで 注文を出します。

もし取引が損切り方向に15ピップ進み、10ピップ戻ったら取引を終了します(最初のステップ)。

もし取引が30ピップス損失方向に行き、15ピップス戻ってきたら、取引を終了する(第二段階)。

というような感じです。

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

 
dedreko:
こんにちは。

あるアイデアに協力してほしい。

私は自分のEAでトレーリングストップ(3ステップトレーリング)を使っていますが、損失を保護するために反転したことをしたいのです。

説明します。

私は最初のストップロスで注文を出します。

もし取引が損切り方向に15ピップ進み、10ピップ戻ったら取引を終了します(最初のステップ)。

もし取引が30ピップス損失方向に行き、15ピップス戻ってきたら、取引を終了する(第二段階)。

こんな感じです。

ありがとうございました

これは私にとって新しいことです。

ということは、負けトレードの決済は、常に跳ね返るまで待つ必要があるのですね?

バウンスバックしない場合はどうなんでしょうか?

最初のSLでクローズするのでしょうか?