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

 

以下のスクリプトを書きました。

//+------------------------------------------------------------------------------------------+
//|                                                                         DeleteObject.mq4 |
//+------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------+
//|                             script program start function                                |
//+------------------------------------------------------------------------------------------+
//---------------------------------------------------------------------------------------- 1 -
#include <Копия WinUser32.mqh>                                    //подключаемый файл, к-й неожходим для работы функции MessageBox: в этом файле в отличии от файла <WinUser32.mqh> в разделе MessageBox() Flags добавлена строка: #define MB_CANCELTRYCONTINUE      0x00000006  
//---------------------------------------------------------------------------------------- 2 -
int start()
  {
   double Timestart=GetTickCount();                               //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   if(ObjectsTotal()==0)                                          //если объектов на графике нет
      {                                                           //начало if
       Alert("На графике нет графических объектов");              //то делаем сообщение на экран...
       return;                                                    //...и выходим
      }                                                           //конец if   
   Alert("На графике зафиксировано ",ObjectsTotal()," Объектов");
   Sleep(3000);
   int ret=MessageBox("Удалить ВСЕ графические объекты?","Удаление графических объектов",MB_YESNO|MB_ICONQUESTION);//функция MessageBox: вопрос на экран
   if(ret==6)                                                     //если ответ ДА,...
      {
       ObjectsDeleteAll();                                        //..., то удаляем ВСЕ объекты из ВСЕХ окон текущего графика
       if(!ObjectsDeleteAll())Alert("При удалениии объектов возникла ошибка ",GetLastError());//если удаление не удалось, то сообщение на экран
       Alert("ВСЕ графические объекты успешно удалены");          //сообщение на экран в случае успешного удаления сех объектов
       return;                                                    //и выход из start
      }                                                           //конец if   
//--------------------если ответ НЕТ? то перебираем объекты по списку---------------------- 3 -
   int obj_total=ObjectsTotal();                                  //получаем общее количество графических объектов
   string obj_name;                                               //объявляем переменную  "имя объекта"
   for(int i=obj_total-1;i>=0;i--)                                //цикл по удалению объекта
     {                                                            //начало for
      obj_name=ObjectName(i);                                     //имя текущего удаляемого объекта
      Alert("Удаляется объект: ",obj_name);                       //сообщение на экран     
      ret=MessageBox("Удалить графический объект?","Удаление графического объекта",MB_YESNO|MB_ICONQUESTION);//функция MessageBox: вопрос на экран
      if(ret==7)continue;                                         //если ответ НЕТ, то на следующую итерацию     
      ObjectDelete(obj_name);                                     //если ответ ДА, то удаляем текущий объект с именем obj_name     
      int error=GetLastError();                                   //вычисляем код возможной ошибки, к-я могла появиться при неудачном удалении Графического объекта номер i
      if(error!=0)Alert("При удалении объекта ",obj_name," возникла ошибка ",error);continue;//если функция ObjectDelete(obj_name) вернуа значение ЛОЖЬ (т.е. не удалила текущий объект), то сообщение об ошибке при удалении
      Alert("Объект ",obj_name," успешно удален");                //сообщение об успешном удалении
     }                                                            //конец for
   Comment("\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения вна экран
//---------------------------------------------------------------------------------------- 3 -
   return(0);
  }
//---------------------------------------------------------------------------------------- 4 -

2語で。このスクリプトは、クライアント端末のウィンドウからグラフィカルオブジェクトを削除 するためのものです。このスクリプトは、すべてのオブジェクトを削除するか、一連のオブジェクトを経由してユーザーが選択したものだけを削除するかの2つの方法で使用することができます。

質問:次のオブジェクトが削除された後のwhile ループで、最後のAlert("Object ",obj_name," successfully deleted")関数が対応するメッセージを画面に表示せず、何も表示されないのはなぜですか(while ループ内でオブジェクトが削除されているのに)?

:スクリプトのヘッダーにあるインクルードファイル#include < WinUser32.mqh> の行は、クライアント端末に付属するオリジナルのインクルードファイル#include <WinUser32.mqh> と異なるので、以下にも記載します。

P.S. フォーラムを散らかさないために、あらかじめご回答をお願いいたします。

ファイル:
 
yosuf:
具体的にどのインジケーターを交換すればいいのでしょうか?今でも別売りで出ているのでは?

例えばMAにはありますが、選択肢が少なく、おっしゃるようなものはありません。

したがって、ほとんどすべてのインジケーターを取り出して、その汎用性を自分で作ることができるのです。

 
7777877:

質問while ループで、次のオブジェクトが削除された後、最後の関数Alert("Object ",obj_name," successfully deleted") が対応するメッセージを画面に表示せず、自分自身も何も表示しないのはなぜですか(対応するオブジェクトはwhile ループで削除されているのに)。


int error=GetLastError();                                   //вычисляем код возможной ошибки, к-я могла появиться при неудачном удалении Графического объекта номер i
      if(error!=0)Alert("При удалении объекта ",obj_name," возникла ошибка ",error);continue;//если функция ObjectDelete(obj_name) вернуа значение ЛОЖЬ (т.е. не удалила текущий объект), то сообщение об ошибке при удалении
      Alert("Объект ",obj_name," успешно удален");                //сообщение об успешном удалении

これは、if(error != 0)がAlertに 影響するだけで、その後は常に 継続し、次のAlertが起動されることはないためです。
 
こんにちは!現在の日中の注文を検索するためのループカウンター(例:FOR)の作り方を教えてください!よろしくお願いします。
 

私はまだ何も理解していないと言うことができる、私はそれがお金を稼ぐことについてのすべてであることを一つのことを理解し、彼らは負けている場合、なぜアドバイザーを行うには、週に一度プラットフォームを入力し、3000の預金で1000を獲得することができます。

 
lowech:
こんにちは!ループのカウンター(例えばFOR)を現在の日中の注文を検索させる方法を教えていただけませんか?

ExistInHistoryToDay()です。
 
kamolot: EAは何のためにあるのか、もし損をしていたら、週に一度プラットフォームにログインして、3000円の入金で1000円を稼ぐことができます。
週に1回でもホームに立ち寄って、1,000円を稼ぐ気概がないのだ。みんなお金を稼ぐだけで精一杯なんです。
 
GaryKa:
ただ、この迷宮入りプログラマーたちは、週に一度でも出社してシュッと稼ぐ心意気はない。みんな疲れていて、儲からないんです。

+100500 8-)
 
GaryKa:
ただ、この迷宮入りプログラマーたちは、週に一度でも出社してシュッと稼ぐ心意気はない。嫌気がさして、金儲けしたいだけなんだよ。

風船はどうする?

 

これは私のアイデアです。

注文を開いて、それがどのようなバランスでクローズされたかによります。

残高が0より小さければ損失を計上し、0より大きければ初めからやり直す。

損失がゼロより小さい場合、それを確定して変数に割り当てた、例えば: マイナス

マイナス=OrderProfit(-45セント)。

AccountAqviti + Minus + 自分の価値(自分の良心)

次発

この注文の利益がAccountAqviti + マイナス + 私の値(私の良心)より高ければ、注文を閉じ、そうでなければ、ゼロより高く行き、それを修正する。

(AccountAqviti + OrderProfit) - (AccountAqviti + マイナス + 自分の価値(良心)) = マイナス

もしMinus >= 0なら、Minus = 0とする。