extern double Lot=0.01; // Жестко заданное колич. лотов datetime time; //--------------------------------------------------------------- 2 -- int start() { int Total;
bool Ans =false, // Ответ сервера после закрытия Cls_B=false, // Критерий для закрытия Buy Cls_S=false, // Критерий для закрытия Sell Opn_B=false, // Критерий для открытия Buy Opn_S=false; // Критерий для открытия Sell
未決済注文の種類はどのように判断すればよいですか?
OrderType()
実は、教科書から始めた方が...。:)せめてMetaEditorのF1を使ってください。
OP_BUY - 買いポジションです。
OP_SELL - 売りポジションです。
OP_BUYLIMIT - 指定されたレベルに達したときに、現在の価格がそのレベルよりも高い場合に、買い注文を保留します。
OP_BUYSTOP - 指定されたレベルに達したときに、現在の価格がそのレベルよりも低い場合に、買い注文を保留します。
OP_SELLLIMIT - 指定されたレベルに達したときに、現在の価格がそのレベルより下にある場合に、売り注文を保留します。
OP_SELLSTOP - 指定されたレベルに達したときに、現在の価格がそのレベルより上にある場合に、売り注文を保留します。
注文は、OrderSelect() 関数で事前に選択されている必要があります。
浮動小数点 値は、doubleの ような実数値です
そして、桁の 代わりにint 型の変数を使用します。
例えば、int dg=MarketInfo ( Symbol(), MODE_DIGITS)のように。
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;
bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell
//--------------------------------------------------------------- 3 --
// Учёт ордеров
for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;
if(Total!=0 || time==Time[1])return;
static int KolBars;
if (Close[0]-Open[0] > Point && Close[1]-Open[1] > Point && Bars == KolBars)
{
KolBars=Bars ; // запоминаем кол-во бар при которых совершались действия
}
// Торговые критерии
// Критерий откр. Buy
Opn_B=true;
//--------------------------------------------------------------- 7 --
if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0);time=Time[1];}
}
助けてください、3回目のお願いです。初歩的なEAで、新しいローソク足が現れたら買いポジションを建て(前の2本のローソク足が緑の場合)、ポジションを建てたローソク足の終値、または次のローソク足の終値でポジションを閉じます。
上にあるものは、オープニングの基準に反応せず、新しいローソク足が現れるたびにポジションを開くのですが、ポジションを閉じる 方法がわかりません、チュートリアルでもフォーラムでも見つけられませんでした。
浮動小数点値はdouble 型の実数です
そして、桁の 代わりにint 型の変数を使用します。
例えば、int dg=MarketInfo ( Symbol(), MODE_DIGITS)のように。
NormalizeDouble()で、最大/最小ロット制限をチェックし、5桁なら-ストップと利益を10倍にしてください」と書いてありました。
ドキュメントには、「浮動小数点数を指定された精度に丸める」とあります。計算されたStopLossとTakeProfitの値、および保留中の注文の開始 価格は、精度に正規化する必要があり、その値は定義済みの変数Digitsに 格納されています。"
NormalizeDoubleで現在値、StopLoss、TakeProfitを正規化 する必要があることは理解できたのですが、どのように正規化 すればよいのでしょうか?
double value -- double value の代わりに Prise 等を使用することができます。
int digits -- そしてこの変数 dg はMarketInfo( Symbol(), MODE_DIGITS) と等しい; ??
NormalizeDouble()で、最大/最小ロット制限を確認し、5桁なら-ストップと利益を10倍にする」と書かれていました。
ドキュメントには、「浮動小数点数を指定された精度に丸める」とあります。計算されたStopLossとTakeProfitの値、および保留中の注文の開始 価格は、精度に正規化する必要があり、その値は定義済みの変数Digitsに 格納されています。"
私はチュートリアルでそれを見つけなかった、私は現在の価格、StopLossとTakeProfitを正規化するためにNormalizeDouble ---を 使用する必要があると理解していますか? もしそうなら、正確にどのように?
2倍値 -- その代わりに、例えば Prise を設定することができます。
int digits -- そしてこの変数 dg はMarketInfo( Symbol(), MODE_DIGITS) と等しい; ??
int StopLoss=50; // StopLossをpipsで表示します。
int TakeProfit=150; // TakeProfitをpipsで表示します。
intOrderDistance=50; // 保留注文の距離(ポイント数
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
int pt=MarketInfo(Symbol(), MODE_POINT); // 建値通貨でのポイントサイズ
int dg=MarketInfo(Symbol(),MODE_DIGITS); // シンボル価格における小数点以下の桁数
int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // 最小許容ストップロス/ステイクプロフィットレベル(ポイント単位
double pa=MarketInfo(Symbol(), MODE_ASK); // アスク価格
double pb=MarketInfo(Symbol(), MODE_BID); // 入札価格
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
double slB=NormalizeDouble(pa-StopLoss*pt, dg); // 買いポジションのStopLoss価格レベルを正規化する。
double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // BidポジションのTakeProfit価格レベルを正規化する。
double slS=NormalizeDouble(pb+StopLoss*pt, dg); // 売りポジションのStopLoss価格レベルを正規化する。
double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // 売りポジションのTakeProfit価格レベルを標準化する。
doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // 買い保留注文を出すための価格水準を正規化する。
double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // 売り保留注文を出すための価格を正規化する。
double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // 保留中の買い注文のStopLossの価格水準を正規化する。
double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // 保留の買い注文のTakeProfitの価格水準を正規化する。
double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // 保留中の売り注文のStopLossの価格水準を正規化する。
double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // 保留中の売り注文のTakeProfitの価格水準を正規化する。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
図解...:)
また、StopLevについても忘れてはいけません - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);
ストップ&テイクアウトの最短距離がこの値を下回らないようにチェックします。
int StopLoss=50; // ストップロス(ポイント)数
int TakeProfit=150; // ポイントでTakeProfitを行う。
intOrderDistance=50; // 保留注文の配置距離(ポイント単位
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
int pt=MarketInfo(Symbol(), MODE_POINT); // 建値通貨でのポイントサイズ
int dg=MarketInfo(Symbol(),MODE_DIGITS); // シンボル価格における小数点以下の桁数
int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // 最小許容ストップロス/ステイクプロフィットレベル(ポイント単位
double pa=MarketInfo(Symbol(), MODE_ASK); // アスク価格
double pb=MarketInfo(Symbol(), MODE_BID); // 入札価格
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
double slB=NormalizeDouble(pa-StopLoss*pt, dg); // 買いポジションのStopLoss価格レベルを正規化する。
double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // BidポジションのTakeProfit価格レベルを正規化する。
double slS=NormalizeDouble(pb+StopLoss*pt, dg); // 売りポジションのStopLoss価格レベルを正規化する。
double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // 売りポジションのTakeProfit価格レベルを標準化する。
doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // 買い保留注文を出すための価格水準を正規化する。
double SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // 売り保留注文を出すための価格を正規化する。
double slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // 保留中の買い注文のStopLossの価格水準を正規化する。
double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // 保留の買い注文のTakeProfitの価格水準を正規化する。
double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // 保留中の売り注文のStopLossの価格水準を正規化する。
double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // 保留中の売り注文のTakeProfitの価格水準を正規化する。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
図解...:)
また、StopLevについても忘れてはいけません - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);
最小停止距離と最短離脱距離がこの値を下回っていないことを確認すること
本当にありがとうございました!!!調べてみます!)
Windowsを再インストールした。アラートウィンドウが ポップアップしなくなった。
ターミナルをクリーンアップし、すべてを再コンパイルしました。
関数を作成して呼び出すにはどうしたらよいですか?
何度目かの教科書を 読んで、教材を勉強して...。:)