[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 863

 
IgorM:

端末がハングアップ(停電)した場合に、重要なデータ/変数を保存する方法はありますか?

- 端末のグローバル変数? ファイルへ?

- どのくらいの頻度で保存する必要がありますか?(最後のエクイティ値といくつかのブールが重要)

何が問題かというと、全て配列にし、tick 毎に配列からファイルにし、初期化でファイルを読み込んで、問題なし
 

こんにちは。

なぜオープンポジションを修正できないのか理解できません。私は注文をタイプしました(注文選択機能で)。

//+------------------------------------------------------------------+
| ニューストレード.mq4
//| 著作権 © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright"著作権 © 2010, MetaQuotes Software Corp.
#プロパティリンク "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern intProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern inttern TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - 損益分岐点レベルにストップを移すために到達する必要のある利益レベル(ポイント)。
extern int LevelWLoss = 1; // - 損益分岐点(ポイント)、利益がLevelProfitレベル(ポイント)に達した後にストップポジションを移動させる。

//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY
int profitsell=((Order OpenPrice()- Ask)/Point); // SELL
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
//----
{
int ticketです。
if (ビッド >iHigh(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point, Hour() == 21 && Minute() == 59)...
}
if (Ask <iLow(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol()、OP_BUYSTOP、Lots_buy、iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point、iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point、 Hour() == 21 && Minute() == 59)
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
return(0)です。
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType()。
order_type=OP_SELL。
int profitsell=((OrderOpenPrice()- Ask)/Point);
もし
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue)。
return(0)です。
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY。
int profitbuy=((Bid - OrderOpenPrice())/Point);
if (profitbuy>5)
int stopmodify=OrderOpenPrice()です。
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue)を実行。
return(0)です。
}
 

開発者の皆様へ質問です。

Expert Advisorからインジケータを呼び出すと、インジケータのグローバル変数が正しく動作しません。

以下、インジケーターのコードです(質問を理解する上で重要な文字列のみ)。

double  price;
double  PriceBuffer[];

int init()
{
   SetIndexBuffer(0,PriceBuffer);
   return(0);
}
int start()
{
   int limit, i;
   int counted_bars=IndicatorCounted();
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(i=limit-1; i>=0; i--)
   {
        PriceBuffer[i] = price;
        price = iClose(NULL,0,i);
   }
   return(0);
}

各バーで現在の価格をグローバル変数priceに保存し、次のバーで表示します。従って、価格表は1本分遅れて表示されるはずです。このインジケータをチャートに貼り付けると、すべてが公平に機能する。

しかし、このインディケータがEAから呼び出され、視覚的なテストを 実行すると、テストの最後に見ることができます:インディケータは、それがあるべき姿にわずかに似ているだけです。

ここで、ビジュアルテストチャート上でインジケータを再計算(例えば、プロパティを開いたり閉じたり)すると、すべてが正常に戻り、再び最初の画像が表示されます。

私は何を間違えているのだろう?

検索してみましたが、答えは見つかりませんでした。

MT4 Version 4.00 Build 226を使用しています。

 
ストーリーの刻みが少ないからだと思います。だから、欠落しているのです。リアルタイムですべてがクリアになるはずです。;)
 

スクリプトが動作するとき、ログにそのようなエラーがあるので、こんにちは、コードのどこに不正確なものがあるか助言してください。

15:40:29 11dP_real_symbol EURUSD,H4: <--- 2つの正しいチャートが見つかりました。--->

15:40:29 11dP_real_symbol EURUSD,H4: <--- 結果を見るには、EURUSD,M1002のチャートを開いてください --->。

15:40:29 11dP_real_symbol EURUSD,H4: MarketInfo関数のシンボル名は文字列でなければなりません。

15:40:29 11dP_real_symbol:FileWriteString 関数の 文字列パラメータが空です。

15:40:29 11dP_real_symbol EURUSD,H4: MarketInfo関数のシンボル名は文字列でなければなりません。

15:40:29 11dP_real_symbol EURUSD,H4: <--- 結果を見るには、チャートを開いてください,M1002 --->。

15:40:29 11dP_real_symbol EURUSD,H4: WindowHandle関数の最初のパラメーターは初期化された文字列でなければなりません。

15:40:30 11dP_real_symbol EURUSD,H4: WindowHandle関数の最初のパラメーターは初期化された文字列でなければなりません。

15:40:31 11dP_real_symbol EURUSD,H4: WindowHandle 関数の 最初のパラメーターは 初期化された文字列でなければなりません。

以下に、コードそのものを添付します。

ファイル:
11dp.mq4  15 kb
 
IgorM:

端末がハングアップ(停電)した場合に、重要なデータ/変数を保存する方法はありますか?

- 端末のグローバル変数? ファイルへ?

- どのくらいの頻度で保存する必要がありますか?(最後のエクイティ値とアドバイザーのいくつかのブールが重要です)


他の変数と異なり、GV変数はどのプログラムからでも作成できるだけでなく、削除することも可能である。変数GVの値は、クライアント端末を閉じた後もコンピュータのハードディスクに残ります。一度宣言したGV変数は、最後の通話から4週間、クライアント端末に存在します。この間、どのプログラムもGV変数にアクセスしなかった場合、クライアント端末によってGV変数が削除される。GV 変数の型は double のみです。
 
etroplus:

こんにちは。

なぜオープンポジションを修正できないのか理解できません。私は注文をタイプしました(注文選択機能で)。

//+------------------------------------------------------------------+
| ニューストレード.mq4
//| 著作権 © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "著作権 © 2010, MetaQuotes Software Corp.
#プロパティリンク "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern intProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern inttern TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - 損益分岐点レベルにストップを移すために到達する必要のある利益レベル(ポイント)。
extern int LevelWLoss = 1; // - 損益分岐点(ポイント)、利益がLevelProfitレベル(ポイント)に達した後にストップポジションを移動させる。

//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUYは冗長、まずすべての変数が0に なる。
int profitsell=((Order OpenPrice()- Ask)/Point); // SELL
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
//----
{
int ticketです。
if (ビッド >iHigh(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point, Hour() == 21 && Minute() == 59)...
}
if (Ask <iLow(NULL,PERIOD_D1,1))
{
if(OrdersTotal() < 1)
ticket=OrderSend(Symbol()、OP_BUYSTOP、Lots_buy、iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point、iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point、 Hour() == 21 && Minute() == 59)
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
return(0)です。
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType()。
order_type=OP_SELL;//maybeif(order_type==OP_SELL), then more brackets are needed.
int profitsell=((OrderOpenPrice()- Ask)/Point);
if (profitsell>5)//だから、1ティックごとに注文を修正しようとするのか?
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue)。
return(0)です。
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY。
int profitbuy=((Bid - OrderOpenPrice())/Point);
if (profitbuy>5)
int stopmodify=OrderOpenPrice()です。
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue)を実行。
return(0)です。
}
 
スクリプトを実行するとログにそのようなエラーが表示されるので、コードのどこに不正確な部分があるのかご指摘ください。


15:40:29 11dP_real_symbol EURUSD,H4: <--- 2つの正しいチャートが見つかりました。--->

15:40:29 11dP_real_symbol EURUSD,H4: <--- 結果を見るには、EURUSD,M1002のチャートを開いてください --->。

15:40:29 11dP_real_symbol EURUSD,H4: MarketInfo関数のシンボル名は文字列でなければなりません。

15:40:29 11dP_real_symbol:FileWriteString 関数の 文字列パラメータが空です。

15:40:29 11dP_real_symbol EURUSD,H4: MarketInfo関数のシンボル名は文字列でなければなりません。

15:40:29 11dP_real_symbol EURUSD,H4: <--- 結果を見るには、チャートを開いてください,M1002 --->。

15:40:29 11dP_real_symbol EURUSD,H4: WindowHandle関数の最初のパラメーターは初期化された文字列でなければなりません。

15:40:30 11dP_real_symbol EURUSD,H4: WindowHandle関数の最初のパラメーターは初期化された文字列でなければなりません。

15:40:31 11dP_real_symbol EURUSD,H4: WindowHandle関数の最初のパラメーターは初期化された文字列でなければなりません。

以下に私自身のコードを添付します。
ファイル:
11dp_1.mq4  15 kb
 

OP BUY "変数の期待値の意味について教えてください。

here while(difference>Span)
(OrderSend(string symbol, OP_BUY, volume, double price, slippage,Bid-stoploss*Point,
Bid+takeprofit*Point, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Red)))

while(0-different>Red)
( OrderSend (string symbol, OP_SELL, volume, double price, slippage,Ask+stoploss*Point,
Ask-takeprofit*Point, string comment=NULL, string comment=0, int magic=0, datetime expiration=0, color arrow_color=Black) )

 
mql4でチャートにポイントを書き込むには? 価格と時間を書き込んで、どのタイムフレームでもその位置に留まるようにする必要があります。