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

 
Youri Lazurenko:

TPとSLがゼロの注文を開き、必要なTPとSLのパラメータで(注文を)変更する、というようなものです。私はすでに書いた、すべてが動作し、他のアカウントで正常に動作した、唯一のnddにそのようなこと。同じようなアカウントを持っている人と仕事をしたことがないので、比較できない。forex4uのピコピコだけかもしれないし、全部のnddのアカウントかもしれない。今後の参考にしたいので教えてほしい。
130のエラーが 出たので、次にストップオーダーのパラメータを見ます。いずれにせよ、サーバーの設定で設定されたStopLevelの値に近づかないようにする必要があります。ゼロに等しい場合、ダブルスプレッド+1ポイントを使用する
 
Youri Lazurenko:

TPとSLがゼロの注文を開き、正しいTPとSLパラメータで(注文を)修正する、というようなものです。私はすでに書いた、すべてが動作し、他のアカウントで正常に動作した、唯一のnddにそのようなこと。同じようなアカウントを持っている人と仕事をしたことがないので、比較できない。forex4uのピコピコだけかもしれないし、全部のnddのアカウントかもしれない。さらに詳しい情報を知りたい。

ポジションを建てる 際、これらの機能を使って、正しいストップとテイクを計算してください。

//+------------------------------------------------------------------+
double CorrectStopLoss(string symbol_name,int op,double price_set,double stop_loss) {
   if(stop_loss==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmin(price-(lv+1)*pt,stop_loss),dg));
   else return(NormalizeDouble(fmax(price+(lv+1)*pt,stop_loss),dg));
}
//+------------------------------------------------------------------+
double CorrectStopLoss(string symbol_name,int op,double price_set,int stop_loss) {
   if(stop_loss==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmin(price-(lv+1)*pt,price-stop_loss*pt),dg));
   else return(NormalizeDouble(fmax(price+(lv+1)*pt,price+stop_loss*pt),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit(string symbol_name,int op,double price_set,double take_profit) {
   if(take_profit==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmax(price+(lv+1)*pt,take_profit),dg));
   else return(NormalizeDouble(fmin(price-(lv+1)*pt,take_profit),dg));
}
//+------------------------------------------------------------------+
double CorrectTakeProfit(string symbol_name,int op,double price_set,int take_profit) {
   if(take_profit==0) return(0);
   double pt=SymbolInfoDouble(symbol_name,SYMBOL_POINT);
   double price=(op==OP_BUY)?SymbolInfoDouble(symbol_name,SYMBOL_BID):(op==OP_SELL)?SymbolInfoDouble(symbol_name,SYMBOL_ASK):price_set;
   int lv=StopLevel(symbol_name), dg=(int)SymbolInfoInteger(symbol_name,SYMBOL_DIGITS);
   if(op==OP_BUY || op==OP_BUYLIMIT || op==OP_BUYSTOP) return(NormalizeDouble(fmax(price+(lv+1)*pt,price+take_profit*pt),dg));
   else return(NormalizeDouble(fmin(price-(lv+1)*pt,price-take_profit*pt),dg));
}
//+------------------------------------------------------------------+
int StopLevel(string symbol_name) {
   int sp=(int)SymbolInfoInteger(symbol_name,SYMBOL_SPREAD);
   int lv=(int)SymbolInfoInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL);
   return((lv==0)?sp*2:lv);
}
//+------------------------------------------------------------------+
 
Alexey Viktorov:

何が違うのか

Pips = チャージ/ロット/ティックバリューの具体的数値 8/2/4 = 1

または

Pips = チャージ/(Lots*Tickvalue)の具体的な数値 8/(2*4) = 8/8 = 1

分数も使える...。


違いは、私の名前の由来も、なぜかPointを掛けて いることです:(OrderCommission()/(tv*OrderLots()))*Point()
 
Artyom Trishkin:
エラー130の 場合は、ストップオーダーのパラメータを見ます。いずれにせよ、サーバーの設定で設定されたStopLevelの値より近くてはならない。ゼロの場合は、見開きで+1点


次回の投稿では、与えられた機能を、ありがとうございました。

ストップが全く設定されていないことです(平均化)。また、このエラーは、朝ターミナルを起動して修正が発生したときにはなく、セッションの最初に注文を開くとき(日足チャート)、およびそれがペアで1つの場合にのみ存在(エラー)するのはなぜですか。テクニカルサポートからは、この改造には時間的、距離的な制限はない(広がりは重要ではない)との回答がありました。

私は、すべての推奨事項を用いていくつかの実験を行い、後で結論を出そうと思います。

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

 
Vitalie Postolache:

違いは、私の名前の由来も、なぜかPointを掛けていることです:(OrderCommission()/(tv*OrderLots()))*Point()

OK、お答えします:1.0520の価格があり、計算で(int)Commという数字を得ました、次にそれを価格から加算/減算する必要があります = 1.0520 + (int)Comm ?さて、Pointの 掛け算をしないために-これは即座に行われます。

 
Youri Lazurenko:


次回の投稿では、与えられた機能を、ありがとうございました。

ストップ(平均化)が全く設定されていないことです。また、このエラーは、朝ターミナルを起動して修正が発生したときにはなく、セッションの最初に注文を開くとき(日足チャート)、およびそれがペアで1つの場合にのみ存在(エラー)するのはなぜですか。テクニカルサポートからは、この改造には時間的、距離的な制限はない(広がりは重要ではない)との回答がありました。

私は、すべての推奨事項を用いていくつかの実験を行い、後で結論を出そうと思います。

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

どういたしまして。

使用方法:ポジションオープンの 機能で、ピップ単位のストップの代わりに、ピップ単位のストップを代用した関数コールをコピーします。または、逆指値は直接入力する必要があります - コンパイラは必要な関数を選択します。テイクプロフィットも同様です。

double price=SymbolInfoDouble(Symbol(),SYMBOL_ASK);         // Цена открытия для Buy
double sl=CorrectStopLoss(Symbol(), OP_BUY, price, 200);    // Стоп в 200 пунктов (вместо пунктов можно вписать расчётную цену, например Ask+200*Point() или значение цены МА)
double tp=CorrectTakeProfit(Symbol(), OP_BUY, price, 300);  // Тейк в 300 пунктов (если вписать расчётную цену, то будет использоваться тип функции с double-параметром)
OrderSend(Symbol(),OP_BUY,Lots,price,slippage,sl,tp,"Комментарий ордера",Magic,0,clrBlue);
 
Vitaly Muzichenko:

OK、お答えします:1.0520の価格があり、計算で(int)Commという数字を得ました、次にそれを価格から加算/減算する必要があります = 1.0520 + (int)Comm ?さて、Pointの掛け算をしないために-これは即座に行われます。


まあ、そうかもしれませんね。ただ、もともとは手数料を価格に換算するのではなく、pipsに換算する方法を質問されたのです。
 
Artyom Trishkin:

どういたしまして。

この方法を使用します。pips単位のストップの代わりにポジションをオープンする 関数で、pips単位のストップの代わりにしたい関数のコールを入力します。または、逆指値は直接入力する必要があります - コンパイラが必要な関数を選択します。テイクプロフィットも同様です。

あらためて、ありがとうございました。すべて最高です。
 
親愛なる皆様へアドバイスお願いします:私は異なる色とスタイル レベルでフィボナッチラインを描き、常に最後のものと同じに設定し、それを修正する方法は?

                  ObjectCreate(0,Fibo_Arrow,OBJ_FIBO,0,Time[0],Close[0],Time[0],price); // создание метки стпа на графике   
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_HIDDEN,true);        // Запрет на показ имени графического объекта в списке объектов 
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_SELECTABLE,false);   // запрет на выделение перемещение объекта мышью   
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_RAY_RIGHT,false);    // луч вправо
                  ObjectSetString(0,Fibo_Arrow,OBJPROP_TOOLTIP,"r\n");       // подпись линии и и её длины в подсказку                  
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_COLOR,1,clrNONE);       // цвет   
                  
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELS,3);           // установим количество уровней   
                      
                  ObjectSetDouble(0,Fibo_Arrow,OBJPROP_LEVELVALUE,0,1.5);  // значение уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELCOLOR,0,Green);  // цвет уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELSTYLE,0,2);     // стиль уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELWIDTH,0,0);     // толщина уровня 
                  ObjectSetString(0,Fibo_Arrow,OBJPROP_LEVELTEXT,0,"0.5"); // описание уровня 
                  
                  ObjectSetDouble(0,Fibo_Arrow,OBJPROP_LEVELVALUE,1,2);  // значение уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELCOLOR,1,Lime);  // цвет уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELSTYLE,1,0);     // стиль уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELWIDTH,1,0);     // толщина уровня 
                  ObjectSetString(0,Fibo_Arrow,OBJPROP_LEVELTEXT,1,"1"); // описание уровня 
                  
                  ObjectSetDouble(0,Fibo_Arrow,OBJPROP_LEVELVALUE,2,2.5);  // значение уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELCOLOR,2,Green);  // цвет уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELSTYLE,2,2);     // стиль уровня       
                  ObjectSetInteger(0,Fibo_Arrow,OBJPROP_LEVELWIDTH,2,0);     // толщина уровня 
                  ObjectSetString(0,Fibo_Arrow,OBJPROP_LEVELTEXT,2,"1.5"); // описание уровня 
 
Money_Maker:
親愛なる専門家、助言してください:私はレベルの異なる色とスタイルで フィボナッチラインを構築しますが、常に最後のものと同じように設定し、どのように修正するには? 再描画とスリップはどこにも役に立ちません(

このオブジェクトを使ったFiboレベルでは、ラインごとに異なるスタイルやカラーを作ることはできません。虹が欲しい場合は、別々の線を描きます。