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

 
Roger:
ファイルを一行ずつ読み、その都度変数に値を代入していくのです。ファイルが終了すると、変数は最後の値を持つようになります。

どのように実装するのか?

何を使ったらいいのかわからない

 
zheleznii:

どのように実装するのか?

何を使えばいいのかわからない


これについては、すでに多くのことが書かれ、書き直されています。https://www.mql5.com/ru/forum/118349 を試してみてください。
 

またおやすみなさい!私は最近、ある通貨ペアで注文を開き、別の通貨ペアで注文を開く多通貨EAを書き始めました。

EAから一番近いトレーリングストップをはがして、遊び始めたのですが、うまくいきませんでした。以下はそのコードです。

// ну так сообственно вызываю функцию - TrailingStop();
//вот что в функции
 void TrailingStop()
{ 
   if (TrailingStop<MinStop) return; 
   int ask, bid, open, stop, level; 
   for (int i=0; i<OrdersTotal(); i++) 
      { 
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
      if (OrderSymbol()!=Symbol()) continue; 
      if (OrderType()==OP_BUY) 
         { 
         bid=MathRound(Bid/Point); 
         open=MathRound(OrderOpenPrice()/Point); 
         stop=MathRound(OrderStopLoss()/Point); 
         level=bid-TrailingStop; 
         if (level<open || level>bid-MinStop) continue; 
         if (stop>0 && stop>=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*Point,OrderTakeProfit(),0,White); 
         Print("трал сдвинут");
         //ShowError(); 
         } 
      if (OrderType()==OP_SELL) 
         { 
         ask=MathRound(Ask/Point); 
         open=MathRound(OrderOpenPrice()/Point); 
         stop=MathRound(OrderStopLoss()/Point); 
         level=ask+TrailingStop; 
         if (level>open || level<ask+MinStop) continue; 
         if (stop>0 && stop<=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*Point,OrderTakeProfit(),0,White); 
         //ShowError(); 
         Print("трал сдвинут");
         } 
      } 
}

ここが解せないところです。Expert Advisor は多通貨対応の Expert Advisor であるため、通貨に対する注文の出し方が予測できず、複数の通貨に対して一度に注文を出すことがあります。

私は、特定の通貨ペアの各開注文は、データ入札、尋ねる、などを必要とすることを理解し、ここで私はどのようなデータをダウンロードする必要があり、どのように私は変更のための順序を選択するのでしょうか?私の頭の中には1つのバリエーションしかなく、最悪のものは各通貨のトレーリングストップを書くことです)何ができるかをアドバイスしてください。

 
Infinity:

またおやすみなさい!私は最近、ある通貨ペアで注文を開き、別の通貨ペアで注文を開く多通貨EAを書き始めました。

EAから一番近いトレーリングストップをはがして、遊び始めたのですが、うまくいきませんでした。以下はそのコードです。

ここが解せないところです。このEAは多通貨対応のExpert Advisorであるため、予測不可能な方法で通貨の注文を出し、時には同時に複数の通貨の注文を出すことがあります。

私は、ある通貨ペアの各オープンオーダーが、bidやaskなどのデータを必要とすることは理解しています。しかし、ここでは、どのデータをロードし、どのように変更のための注文を選択するかを見つけたい のです。私の頭の中には1つのバリエーションしかなく、最悪のものは各通貨のトレーリングストップを書くことです)何ができるかをアドバイスしてください。

トロールのコードにツールシンボルを渡してみてください。そして、各ペアごとにトロールを呼び出すことになります。
void TrailingStop(string sy)

if (sy == "" || sy == "0") sy = Symbol();
さて、そのsy値をもとに、特定のシンボルデータに他の値を割り当てる...。同じAsk with Bidでも、例えば...。
 

Infinity:

技術的なことはよくわからないし、どうなるのかもわからない。


 
Roger:

それについては、すでに多くのことが書かれ、書き直されています。https://www.mql5.com/ru/forum/118349 を試してみてください。

int a1;

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
FileWrite(handle,a1)を実行します。

FileClose(handle)。

ファイルa1=5で

基本的なことがわからない。

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
ここでは、a1 に値 5 を代入しています。

FileClose(handle)。

至れり尽くせり

 
Infinity:
関数に渡されたペアのデータに基づいて、トロールコード内の変数に値を割り当てる。トロールのコードを確定して...。例えば、変数Bidはただ宣言するだけではいけません。

が、値を代入して宣言されている。

int ask = MarketInfo(sy, MODE_ASK), bid=MarketInfo(sy, MODE_BID), open, stop, level;

従って

bid=MathRound(Bid/Point);

は、すでにそうでない場合、例えば、書かれているはずです。

bid=MathRound(MarketInfo(sy, MODE_BID)/Point);

または、別の変数、例えばPriceBidを作り、次のように書きます。

PriceBid=MathRound(Bid/Point);

で、コード内でBidの代わりにPriceBidを使う...。

すべてのコードに目を通し、必要に応じて特定のシンボルに対応する変数を使用します。
そして、このシンボルは、trawl関数を呼び出すときに渡します。

 TrailingStop( EURUSD);     // Тралим ЕвроБаксы
 TrailingStop("");         // Тралим символ графика

または

TrailingStop(NULL);         // Тралим символ графика

よりクリアになりましたか?

 
artmedia70:
関数に渡されたペアのデータに基づいて、トロールコード内の変数に値を割り当てる。トロールのコードを確定して...。例えば、変数Bidはただ宣言するだけではいけません。

が、値を代入して宣言されている。

対応する

は、すでにそうでない場合、例えば、書かれているはずです。

または、別の変数、例えばPriceBidを作り、次のように書きます。

で、コード内でBidの代わりにPriceBidを使う...。

すべてのコードに目を通し、必要に応じて特定のシンボルの変数値のフェッチを使用します。
そして、このシンボルは、trawl関数を呼び出すときに渡します。

または

よりクリアになりましたか?





ただ、どの通貨ペアをどのタイミングで送ってもらえばいいのかがわかりません。 例えば、このペアで4つの注文が開いていて、これらのペアを送ってくださいという情報をどこで得ることができるのかがわかりません。

自分のやり方が正しいかどうかはわからないが......とにかく......。

в блоке start  определяю открытые ордера и определяю по каким парам они открыты
 for (int i=0; i<OrdersTotal(); i++) 
      { 
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
      if (OrderSymbol()=="EURUSD") {sy="EURUSD";MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
      if (OrderSymbol()=="GBPUSD") {sy="GBPUSD";MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
       
      } 
  TrailingStop(sy);

а в функции делаю следующее

void TrailingStop(string sy)
{ 
   if (TrailingStop<MinStop) return; 
   int ask, bid, open, stop, level,point; 
   for (int i=0; i<OrdersTotal(); i++) 
      { 
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
      if (OrderSymbol()==sy)  
      bid=MarketInfo(sy,MODE_BID);
      ask=MarketInfo(sy,MODE_ASK);
      point=MarketInfo(sy,MODE_POINT);
      if (OrderType()==OP_BUY) 
         { 
         bid=MathRound(bid/point); 
         open=MathRound(OrderOpenPrice()/point); 
         stop=MathRound(OrderStopLoss()/point); 
         level=bid-TrailingStop; 
         if (level<open || level>bid-MinStop) continue; 
         if (stop>0 && stop>=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(),0,White); 
         Print("трал сдвинут");
         //ShowError(); 
         } 
      if (OrderType()==OP_SELL) 
         { 
         ask=MathRound(ask/point); 
         open=MathRound(OrderOpenPrice()/point); 
         stop=MathRound(OrderStopLoss()/point); 
         level=ask+TrailingStop; 
         if (level>open || level<ask+MinStop) continue; 
         if (stop>0 && stop<=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(),0,White); 
         //ShowError(); 
         Print("трал сдвинут");
         } 
      } 
}

しかし、なぜかEURUSD:zero divideという エラーが出ました。このエラーはおそらく変数0のどこかで、分割型の操作の際に発生したものだと思われます。私は、全く正しく実装しようとしていないのでしょうか?

 
zheleznii:

int a1;

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
FileWrite(handle,a1)を実行します。

FileClose(handle)。
ファイルa1=5で

基本的な事項で誤解がある。 説明してください - 提案された事項を記入してください。

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
ここでは、a1 に値 5 を代入しています。

FileClose(handle)。

本当に必要なんです。

だから、順番に。

最新のデータだけが必要なのであれば、なぜ以前のものを保存するのか?(FILE_READ|FILE_WRITE モードの組み合わせで「書き込み前」が発生します)。
したがって、 FILE_CSV|FILE_WRITE モードを使用する方が論理的であり、新しいデータを書き込む前に前のレコードが削除されます。

さっそく4つの変数をファイルに書き込んでみましょう。

//+------------------------------------------------------------------+
int start(){
   int handle;
   int a1 = 3;
   double punkt = 0.4;
   double nn = 1128;
   double mm = 1000;

   handle=FileOpen("a1.csv",FILE_CSV|FILE_WRITE,';');
   FileWrite(handle,a1,punkt,nn,mm);
   FileClose(handle);           
}
//+------------------------------------------------------------------+

変数が書かれている順番を覚えておくことが大切です。

それでは、ファイルから変数へのデータの読み込みを開始します。

//+------------------------------------------------------------------+
int start(){
   int handle;
   int a;
   double p;
   double n;
   double m;   
   handle=FileOpen("a1.csv",FILE_CSV|FILE_READ, ';');         
   
   a = FileReadNumber(handle);    //считываем первую цифру, соответствующую переменной a1 и далее по порядку...
   p = FileReadNumber(handle);    //punkt
   n = FileReadNumber(handle);    //nn
   m = FileReadNumber(handle);    //mm
   
   FileClose(handle);           
}
//+------------------------------------------------------------------+

FileReadNumber() 関数を使って、番号の後に書かれた順番に読み込んでいます。
それだけです、難しいことは何もありません :)

 
Infinity:


ただ一つわからないのは、どの通貨ペアをどのタイミングで私に送るかということです。 例えば、このペアで4つの注文が開いていて、これらのペアを私に送るべきだという情報はどこから得られるのでしょうか?

自分のやり方が正しいかどうかはわからないが・・・とにかく・・・。

どうやら、このエラーは、変数のどこかに0がある、おそらく割り算の操作だ、ということらしい。私は正しく実装しようとしているのだろうか?

変数の代入 操作の後、あるいは除算操作の前に校正を行い、どこでゼロになるかを確認し、そこから始めてください。