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

 

問題です。アドバイスをお願いします。

InOrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

OrderProfit()は、履歴リストの最初の利益を返します。

履歴リストの最後の利益を返すようにするにはどうしたらいいですか?

こんな風にやってみました。

A=OrdersHistoriTotal()です。

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit() は全く何も返しません)

)) が、うまくいきません。

 

プロフェッショナル、スクリプトを修正する方法をアドバイスしてください。データのエクスポートにスクリプトを使用しています

int start()
  {
  out_hist("EURUSD",1440);
  out_hist("GBPUSD",1440);
  out_hist("USDJPY",1440);
  out_hist("USDCAD",1440);
  out_hist("AUDUSD",1440);
//

  
  return(0);
  }
//  
int out_hist(string ccy, int tf)
{
  string fname = ccy + tf + ".txt";
  int handle = FileOpen(fname, FILE_CSV|FILE_WRITE, ",");
  if(handle>0)
    {
     FileWrite(handle,"<TICKER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>");    // header
     for(int i=iBars(ccy,tf)-1; i>=0; i--)
       {
       string P =ccy + tf;
       string date1 = TimeToStr(iTime(ccy,tf,i),TIME_DATE);
       date1 = StringSubstr(date1,0,4) + StringSubstr(date1,5,2) + StringSubstr(date1,8,2);
       string time1 = TimeToStr(iTime(ccy,tf,i),TIME_MINUTES);
       FileWrite(handle, P, date1, time1, iOpen(ccy,tf,i), iHigh(ccy,tf,i), iLow(ccy,tf,i), iClose(ccy,tf,i), iVolume(ccy,tf,i));
       }
     FileClose(handle);
     }
//----
   return(0);

データのあるファイルが5つ出力されるのですが。1つのファイルを取得したいのですが、そのファイルには、最初の計測器のデータ、次に2番目の計測器のデータ、といった具合に含まれています。1つのファイルにまとめられない...。ありがとうございます。

 
kon12:

プロフェッショナル、スクリプトを修正する方法をアドバイスしてください。データのエクスポートにスクリプトを使用しています

出力はデータで5ファイルです。1つのファイルを取得したいのですが、そのファイルには、最初の計測器のデータ、次に2番目の計測器のデータ、といった具合に含まれています。1つのファイルにまとめられない...。ありがとうございます。


ファイルオープンを使って読み書きを行い、ファイルの末尾に移動し、追加する

FileOpen(fname,FILE_WRITE|FILE_READ)。

ファイルシーク(FileSeek)

おだいじに

 
gheka:

問題です。アドバイスをお願いします。

In OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

OrderProfit()は、履歴リストの最初の利益を返します。

履歴リストの最後の利益を返すようにするにはどうしたらいいですか?

こんな風にやってみました。

A=OrdersHistoriTotal()です。

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit() は全く何も返しません)

)) が、うまくいきません。


だから、最後の令状はまだ見つかっていない。そして、最後の1枚はどれだ。開店時間 または閉店時間までにそしてもちろん、どの楽器を探すかも忘れてはいけません。
 
トランザクションの最大音量をハード制限するためのEAに何を書くべきかアドバイス? それはちょうど開くためにどのボリュームを決定しますが、時には大きなボリュームを開き、その後壊れて行く、私は最大0.5を制限する必要があります
 
ilmur:
トランザクションの最大音量をハード制限するためのEAに何を書くべきかアドバイス? それはちょうど開くためにどのボリュームを決定しますが、時には大きなボリュームを開き、その後壊れて行く、私は最大0.5を制限する必要があります
extern double MyMaxVolume=0.5;

...

if(рассчитанный_объем > MyMaxVolume) рассчитанный_объем=MyMaxVolume;
 
Necron:

知っている人なら、自分でやっているはずです。しかし、ここでは他の人のコードに変更を加えなければならないようだ
 

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

 
extern double SL=20; // SL для открываемого ордера
extern double TP=20; // ТР для открываемого ордера
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;

double
M_0,
M_1;


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;


// Торговые критерии

M_0=iOsMA(NULL,0,13,34,8,0,0); // 0 бар
M_1=iOsMA(NULL,0,13,34,8,0,1); // 1 бар



if (M_1<0 && M_0>0)
Opn_B=true;

if (M_1>0 && M_0<0)
Opn_S=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,Bid-SL*Point,Bid+TP*Point);time=Time[1];}

if (Opn_S)
{OrderSend(Symbol(),OP_SELL,Lot,Bid,0,Ask+SL*Point,Ask-TP*Point);time=Time[1];}
}


OsMAがゼロラインを超えたらポジションを建てる EA。どこで開くのか、その理由は不明です。iOsMA(NULL,0,13,34,8,0,0) がエラーになるかどうか確認してください。
 
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}

うまくいきませんね、ここを変えるか、開始の後に入れるかしないといけないのかもしれませんね。

紙に書かれたあなたのコードを、私が理解できるロシア語に翻訳しようとしましたが、うまくいきません。

特に各条件が続く場合、8つの条件のうち1つの条件が続くと複雑すぎる。

もちろん、このコードを作った人が奇跡であることに異論はありませんが、私にとっては完全な倒錯です(良い意味で)。

標準機能以外の各操作や条件には、コメントをつけるのが面倒です。