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

 

こんにちは。標準の SendMail 関数についての質問 です... この関数の動作を理解するために、次のようなスクリプトを書き ました。

//+------------------------------------------------------------------+
//|                                             функция_SendMail.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//+------------------------------------------------------------------+

SendMail("Скрипт Функция_SendMail","Webmoney - идите в жопу!!!!");
Alert(GetLastError());
   
//+------------------------------------------------------------------+   
   return(0);
  }
//+------------------------------------------------------------------+

クライアント端末のウィンドウで実行すると、ログにエラーが 表示される。

設定(クライアント端末メニューのツール設定メール タブ)において、以下のパラメータを設定する。

SMTP ログインとFrom Whomの フィールドに3つのドットの代わりに、メッセージを送信したいメールボックスの名前があり、Toの フィールドには、メッセージを送信したいメールボックスの名前があります。

同時に、SMTP Server 項目で指定されたポート 番号は、本当に25 です。

注:スクリーンショットは、Mailの ヘルプセクションで作成したものです。Ru.

質問:このエラーは何ですか、どう したらいいですか?コンパイラはエラーを表示 せず、GetLastError()関数は 0を返します

P.S.掲示板を乱雑にしないためにも、あらかじめ ご回答をお願いします。

 
7777877:

こんにちは。標準の SendMail 関数についての質問 です... この関数の動作を理解するために、次のようなスクリプトを書き ました。

クライアント端末のウィンドウで実行すると、ログにエラーが 表示される。

設定(クライアント端末メニューのツール設定メール タブ)において、以下のパラメータを設定する。

SMTP ログインとFrom Whomの フィールドに3つのドットの代わりに、メッセージを送信したいメールボックスの名前があり、Toの フィールドには、メッセージを送信したいメールボックスの名前があります。

同時に、SMTP Server 項目で指定されたポート 番号は、本当に25 です。

注:スクリーンショットは、Mailの ヘルプセクションで作成したものです。Ru.

質問:このエラーは何ですか、どう したらいいですか?コンパイラはエラーを検出 せず、GetLastError()関数は 0を返します

P.S.掲示板を乱雑にしないためにも、あらかじめ ご回答をお願いします。

ポートや暗号化を見てください。2525に設定したほうがいいのでは?
 

ヘルプをお願いします。

以下はそのコードです。


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

マイナスで取引が成立した時にループを開いて、次の注文がゼロ以上で成立した場合、つまり残高がプラスでもマイナスより少ない場合、マイナスにプラスを足して新しいマイナス値を得るのですが、すでに少なくなっているので、どうしようもありません。

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

もし、シグナルに従って、よりマイナスになった場合は、注文をクローズして、サイクルを最初から開始します。


状況は、このコードが損失で取引を終了するとき、それはマイナス残高を記憶し、それがプラスで取引を終了し、プラスが残高よりも小さいとき、それはSum_Lossをリセットし、私はそれがゼロにならないと、刈り取られる必要があることである。

だから、今はこうなっているんです。

クローズした注文をチェックし、クローズした注文の利益がゼロより小さければ、その利益をSum_Lossに加え、オープンした取引の利益がSum_Lossを超える(超える予定)まで続け、達した時点で取引をクローズし、Sum_Lossをゼロにして再びサイクルを開始します。

必要なんです。

の注文がマイナスで決済されると、そのマイナス分の利益がSum_Lossに加算され、次の取引がプラスの利益で決済されると、Sum_Lossはその利益から派生した分だけ減少し、つまり次のオープン注文Sum_Lossはすでに小さい金額になっており、注文利益がSum_Lossより大きくなるまで、Sum_Lossはクリアされて新しいサイクルが開始されるのです。

Sum_Loss = 0;

1回目の決済注文:利益(-50)<0

Sum_Loss + 利益 (Sum_Loss + (-50))

Sum_Loss = -50;

2回目の決済注文:利益(+40)>0かつSum_Loss<0

損失額+利益額 (Sum_Loss + 40)

Sum_Loss = -10
 
7777877:

こんにちは。標準の SendMail 関数についての質問 です... この関数の動作を理解するために、次のようなスクリプトを書き ました。

クライアント端末のウィンドウで実行すると、ログにエラーが 表示される。

設定(クライアント端末メニューのツール設定メール タブ)において、以下のパラメータを設定する。

SMTP ログインとFrom Whomの フィールドに3つのドットの代わりに、メッセージを送信したいメールボックスの名前があり、Toの フィールドには、メッセージを送信したいメールボックスの名前があります。

同時に、SMTP Server 項目で指定されたポート 番号は、本当に25 です。

注:スクリーンショットは、Mailの ヘルプセクションで作成したものです。Ru.

質問:このエラーは何ですか、どう したらいいですか?コンパイラはエラーを表示 せず、GetLastError()関数は 0を返します

P.S.掲示板を散らかさないためにも、あらかじめご返信を お願いします。

てをさしのべる

smtp.mail.ru:25のサーバは本当に動作するのか?

 
YOUNGA:

手つだい

smtp.mail.ru:25のサーバーは本当に機能するのですね。

私のテストログイン、誰から、誰へ、が一致します。

ファイアウォールが邪魔しているのでは?

やばい、100万個のチップだ! - 端末をリセットしてください。


 

人を助ける

価格xで保留の注文を 出した。注文は価格Yで成行注文に変換されます。保留中の注文がどの価格で発注されたかをどこかで知ることができますか(ジャーナルで...または)、または自分で配列を書く必要があります。

 

こんばんは!(^o^)

エラーの原因として考えられるものを教えてください。言葉を覚えたばかりなので、ちょっと困っています。

Expert Advisor のコードでは、.scv ファイルからデータを読み取り(1 行に 2 つの値、400 行)、配列に書き込むというタスクがあります。

double signals_array[400][2];

int init()
  {

   int Handle;
      Handle=FileOpen("Signals.csv",FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
      {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла");//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла");//..такое сообщ
         PlaySound("Bzrrr.wav");          // Звуковое сопровождение
         return;                          // Выход из start()      
      }

   for (int i = 0; i < 400; i++)
      {
      for (int j = 0; j < 2; j++)
         signals_array[i][j] = StrToDouble(FileReadString(Handle));
      }

Alert (signals_array[120][0],"; ",signals_array[0][1]," OK!");
//----
   return(0);
  }

問題は以下の通りです。チャート上でEAを投げると、配列からの正しい値でアラートが出力されますが、EAをテストしようとすると、ログに「ファイルがありません」というアラートが出力されます。つまり、ファイルにアクセスできないようで(信じられないことですが)、配列に値を書き込むのですが(これは別のアラートで確認)、ログによるとファイルを見つけるところで詰まってしまうのだそうです。混乱した。以下はスクリーンショットです。

 

alexeymosc:

問題は以下の通りです。Expert Advisorをチャートに投げると、配列から正しい値を出力するアラートが出力されますが、Expert Advisorをテストしようとすると、ログに「No file」のアラートが出力されます。すなわち、ファイルにアクセスできないようで(信じられないことですが)、配列に値を書き込むのですが(これは別のアラートで確認)、ログにファイルを見つけるとフリーズしてしまいます。混乱した。


テスターとチャートでは、ファイルは異なるディレクトリに書き込まれ、読み込まれます。

  1. MetaTrader 4
  2. MetaTrader 4
 
alexeymosc:

こんばんは!(^o^)

エラーの原因として考えられるものを教えてください。言葉を覚えたばかりなので、ちょっと困っています。

Expert Advisor のコードでは、.scv ファイルからデータを読み取り(1 行に 2 つの値、400 行)、配列に書き込むというタスクがあります。

問題は以下の通りです。チャート上でEAを投げると、配列からの正しい値でアラートが出力されますが、EAをテストしようとすると、ログに「ファイルがありません」というアラートが出力されます。つまり、ファイルにアクセスできないようで(信じられないことですが)、配列に値を書き込むのですが(これは別のアラートで確認)、ログによるとファイルを見つけるところで引っかかるのだそうです。混乱した。以下はスクリーンショットです。

ファイルを開いている場合は、そのファイルに対する作業でエラーが発生しても、ファイルを閉じる必要があります。今のところ、もうエラーは出ていません。

このように読むことができます。

signals_array[i][j] = FileReadDouble(Handle);
 
Reshetov:

テスターとチャートでは、ファイルの書き込みと読み出しが別々のディレクトリで行われます。

  1. MetaTrader 4
  2. MetaTrader 4

ユーリ、リスペクト!今理解して修正しました。

Zhunkoさん、ありがとうございます。その方法でやってみたのですが、文字列ファイルからバイナリデータを読み込めないとか、そういうエラーが出ました。とにかく、私の工作はうまくいくんです。