[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 65

 

ロール さん、ありがとうございます。ここに、チャートの 左下にコメントを表示する機能がありますので、必要な方がいらっしゃいましたら、ご利用ください。

void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}

 
ファイルを開く→目を通す→ファイルを 閉じるという1つのスクリプトで、ファイルを再び開く方法を教えてください。ファイルを再び開こうとすると、「ファイルの終わり」と表示されます...
 
こんにちは、この問題に遭遇した人がいたら教えてください。 通貨チャートのウィンドウで、時々チャート自体が消えてしまいます。 その後、リフレッシュと表示され、すべてが復元されます。このとき、エキスパートアドバイザーが正しく動作しない(無条件で取引を開始する)ことがあります。今日も最大ロットで取引開始。私はそれに気づき、2.5ポイントの損失で決済しました。以下は、ロットを決定するためのコードです。これは、最後の2行のせいではないか、と思うのです。でも、どうやって?
//========================================================================                                                                              
//определение лота
//========================================================================

double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
LOT=NormalizeDouble(AccountFreeMargin()*RISK/100000,2);
if (LOT*One_Lot > Free) // Не хватает даже..
     {                                         // ..на минимальн. лот:(
         Comment("денег нет  " );  
            return(0);                           // ..и выход 
     }
     else Comment("деньга есть  " );
if(LOT<Min_Lot)
 LOT=Min_Lot;
if(LOT>Max_Lot)
 LOT=Max_Lot;
далее открытие ордера по условиям.
 
Lians:

みなさん、こんにちは。

のように、グラフ上にテキストを表示することは可能かどうか教えてください。

を別の関数として出力し、このように呼び出すことができます。

この機能を見てください。

//+----------------------------------------------------------------------------+
void iPrint(bool print, string mess1, string mess2="", string mess3="", string mess4="", 
            int sz=9, color cl1=Aqua, color cl2=Aqua, color cl3=Aqua, color cl4=Aqua) {
   string   NameGrafText, message, nm;
   int      i, y, k, LenStr, shift, Win_Num=-1, num=0;
   color    cl;
   if (mess1=="") {
      Print("Func iPrint: Передана пустая строка, выходим");
      return;
      }
   Win_Num=WindowFind("Win_Inform");
   if (print || Win_Num<0) {
      message=mess1+mess2+mess3+mess4;
      Print(message); 
      return;
      }
   k=ArraySize(Mass_Name_Message)-1;
   if (StringLen(mess1)>0) num++;
   if (StringLen(mess2)>0) num++;
   if (StringLen(mess3)>0) num++;
   if (StringLen(mess4)>0) num++;
   for (i=k; i>=0; i--) {                             
      NameGrafText=Mass_Name_Message[i];           
      if (StringLen(NameGrafText)>0)
      if (ObjectFind(NameGrafText)==Win_Num) {
         if (i+num>k) {
            ObjectDelete(NameGrafText);  
            Mass_Name_Message[i]="";
            }
         else if (i+num<=k) {
            Mass_Name_Message[i+num]=Mass_Name_Message[i];
            y=ObjectGet(NameGrafText, OBJPROP_YDISTANCE);               // координата Y
            ObjectSet  (NameGrafText, OBJPROP_YDISTANCE, y+(sz+1)*num); // координата Y
            ObjectSet  (NameGrafText, OBJPROP_COLOR, LightSeaGreen);    // цвет
            }
         }
      }
   shift=num;
   int v=GetTickCount();
   for (i=0; i<num; i++) {
      shift--;
      NameGrafText=Prefix+"_Graf_Text_"+i+"_"+sy+"_"+v;
      int app=0;
      while (ObjectFind(NameGrafText)==Win_Num) {
         app++;
         NameGrafText=Prefix+"_Graf_Text_"+i+"_"+sy+"_"+v+"_"+app;
         }
      Mass_Name_Message[num-1-i]=NameGrafText;
      switch (i) {
         case 0: message=mess1; cl=cl1; break;
         case 1: message=mess2; cl=cl2; break;
         case 2: message=mess3; cl=cl3; break;
         case 3: message=mess4; cl=cl4; break;
         default:message=mess1; cl=cl1; break;
         }
      ObjectCreate (NameGrafText, OBJ_LABEL, Win_Num, 0, 0);
      ObjectSetText(NameGrafText, message, sz, "Courier New", cl);
      ObjectSet    (NameGrafText, OBJPROP_COLOR, cl);                   // цвет
      ObjectSet    (NameGrafText, OBJPROP_CORNER,    2);                // угол
      ObjectSet    (NameGrafText, OBJPROP_XDISTANCE, 150);              // координата Х
      ObjectSet    (NameGrafText, OBJPROP_YDISTANCE, 2+(sz+1)*shift);   // координата Y
      WindowRedraw();
      }
   return;
}
//+----------------------------------------------------------------------------+

チャート上に空のWin_Informインジケータウィンドウを探し、存在すればその中にメッセージを表示します。そうでない場合は、printで出力します。

コール例

//-------------------------------------------------------
   message1=StringConcatenate("Тик: ",GetTickCount()," ");
   message2=StringConcatenate("Цена Bid: ", DoubleToStr(Bid,dg));
   iPrint(false, message1, message2, "", "", 9, Aqua, DarkOrange);
   b=4; c=7;
   a=b+c;
   message1=StringConcatenate("a=",a," ");
   message2=StringConcatenate("b=",b," ");
   message3=StringConcatenate("c=",c);
   iPrint(false, message1, message2, message3, "", 9, Aqua, LimeGreen, DarkOrange);
   
   message1=StringConcatenate("Время: ", TimeToStr(TimeCurrent())," ");
   message2=StringConcatenate("Тик: ",GetTickCount()," ");
   message3=StringConcatenate("Время бара: ",TimeToStr(Time[0])," ");
   message4=StringConcatenate("Цена Bid: ", DoubleToStr(Bid,dg));
   iPrint(false, message1, message2, message3, message4, 9, Aqua, Aqua, Aqua, DarkOrange);
//-------------------------------------------------------

グローバルレベルで宣言された配列文字列 Mass_Name_Message[10] を使用します。オブジェクト名を格納するための配列である。用途に合わせて大きさを変えることができます。Prefix変数には、グラフィカルなオブジェクトを 正しく扱うために、エキスパートが自身のオブジェクトを識別できるようにするための名前が格納されています。また、グローバルに宣言され、文字列の型を持っています。きっと、わかるはず...。

トレーラーの中のトルコ

ファイル:
 

自分の機能の小さな問題に直面した。

void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}

例えば、「EAの設定を確認してください。設定ウィンドウを開くにはF7キーを押してください」という行をコメントしようとすると、長いメッセージを切り取ります。

これを残すのみです。"Check your EA settings to open settings window "と表示され、ウィンドウの半分も文字がないにもかかわらず、切れてしまう。

この制限を解除する方法があれば教えてください。

 

いいえ、ラベルの最大行数=62文字です。

テキストを 複数の行(ラベル)に分けてフォーマット するか、Comment()を使用する - 文字数は255文字です。

 
こんにちは。
ある(ユーザーが定義した)数の注文を 開く際に問題が発生しました。
この問題を解決するために、小さなコードを書きました。
しかし、テストの終了間際になると、任意の数のオーダーが開かれることがある。

以下は、コードそのものです。

extern string Kolichestvo_orderov = "Количество единовременно открытых ордеров";
extern int OrederBuy = 1;
extern int OrederSell = 1;


int OrdS=1,OrdB=1,ticketBuy,ticketSell,lastticketSell=0,lastticketBuy=0;

//========================================================================================================//     
                                  //---- Открытие ордеров SELL ----//
//========================================================================================================//

if(OrdS<=OrederSell)
  { //----- start
 
if(trendDn==true && SthFast>88.2 && SthSlow<38.2)
     {
ticketSell=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue);OrdS++; //--- Если ордер открыт параметр OrdS увеличиваю 
     }
   } //-----end
          
//========================================================================================================//  
                                   //----Открытие ордеров BUY ----//
//========================================================================================================//  

if(OrdB<=OrederBuy)
  { //-----start

if(trendUp==true && SthFast<11.8 && SthSlow>61.8)
      {
ticketBuy=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red);OrdB++; //--- Если ордер открыт параметр OrdB увеличиваю
      }

  } //------end
  

//------------------------------- Подсчет количества ордеров BUY & SELL ----------------------------------//
   
  if(ticketBuy<=OrdersHistoryTotal()) //------ проверка тикетов тех  ордеров которые уже закрыты
   {
  for(int ordBuy=lastticketBuy;ordBuy<=OrdersHistoryTotal();ordBuy++) //--- перебор новых закрытых ордеров
    {
     if(OrderSelect(ordBuy,SELECT_BY_POS,MODE_HISTORY)==true){if(OrderType()==OP_BUY)OrdB--;lastticketBuy=ticketBuy;} //--- если добавился новый закрытый ордер бай, то параметр OrdB уменьшаю
    }
   }
  
  //-----
    
 if(ticketSell<=OrdersHistoryTotal()) //------ проверка тикетов тех  ордеров которые уже закрыты
  {
 for(int ordSell=lastticketSell;ordSell<=OrdersHistoryTotal();ordSell++) //--- перебор новых закрытых ордеров
     {
     if(OrderSelect(ordSell,SELECT_BY_POS,MODE_HISTORY)==true){if(OrderType()==OP_SELL)OrdS--;lastticketSell=ticketSell;} //--- если добавился новый закрытый ордер селл, то параметр OrdS уменьшаю

もっとシンプルな解決策があれば、コメントをいただければと思います。

 
Lians:

自分の機能の小さな問題に直面した。

void mycomment(color c,string mytext)
{
string name="mycomment";
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet("mycomment", OBJPROP_CORNER, 2);
ObjectSet(name,OBJPROP_XDISTANCE,5);
ObjectSet(name,OBJPROP_YDISTANCE,7);
ObjectSetText(name,mytext,12,"",c);
}

例えば、「EAの設定を確認してください。設定ウィンドウを開くにはF7キーを押してください」という行をコメントしようとすると、長いメッセージを切り取ります。

これを残すのみです。"Check your EA settings to open settings window "と表示され、ウィンドウの半分も文字がないにもかかわらず、切れてしまう。

この制限を解除する方法があれば教えてください。

私の機能を試してみてください。このページのあなたの投稿の上にあります。文字列を複数の文字列に分割し、各文字列の長さが64文字以下になるようにする。私の関数は、これらの分割された行を1つずつ上に出力します。そして、次のメッセージを表示するときに、上の古いメッセージをグレースケール化し、新しいメッセージを私の関数を呼び出したときに設定した色で表示するのです。
 
履歴をダウンロードしたところ、偶然にも2012.01.16から2012.03.20までのUSDJPYに穴が開いていることが判明しました。再ダウンロードしようとしたら、端末が「履歴が全部残っている」と答えた。
このギャップを埋めるにはどうしたらいいのか?
履歴を穴なくアップロードするにはどうしたらよいですか?
また、履歴に穴が開いているかどうかを確認する方法はありますか?
 
artmedia70:
私の機能を試してみてください。このページのあなたの投稿の上にあります。文字列を複数の文字列に分割し、各文字列の長さが64文字以下になるようにする。私の関数は、これらの分割された行を1つずつ上に出力します。そして、次のメッセージを表示するときに、上の古いメッセージをグレースケール化し、新しいメッセージを私の関数を呼び出したときに設定した色で表示するのです。
ありがとうございます。しかし、私にとっては少し複雑で、あなたの関数は一度に4つのメッセージを出力しますが、私は1つのメッセージを必要とします。1行に64文字以内であることが判明?