Problem with file open in mt4

 
Hi,

This read file works, but what is problem because I can't write in another application, like C# (file is already open in another process).


this is my code:

string sym="DarkPoint_test.txt";
void OnTick()
  {
      if (CountTrades()==0)
      {
     //--- open the file
  // ResetLastError();
   int file_handle=FileOpen(sym,FILE_COMMON|FILE_TXT|FILE_READ|FILE_SHARE_READ);
   if(file_handle!=INVALID_HANDLE)
     {//Alert("54353");
     // Alert("%s file is available for reading",sym);
     // PrintFormat("File path: %s\\Files\\",TerminalInfoString(FILE_COMMON));
      //--- additional variables
      int    str_size;
      string str;
      //--- read data from the file
      while(!FileIsEnding(file_handle))
        {
         //--- find out how many symbols are used for writing the time
         str_size=FileReadInteger(file_handle,INT_VALUE);
         //--- read the string
         str=FileReadString(file_handle,str_size);
         //--- print the string
         PrintFormat(str);
         
        string symbol=StringSubstr(str, 0, StringFind(str, ":")); 
        
        string buy= symbol+":Buy Signal";
        string sell= symbol+":Sell Signal";
        
        
        if (str==buy)
        {   
               OrderSend(symbol, OP_BUY, InitialLot, Ask, Slippage, Ask-StopLoss*Point, Bid+TakeProfit*Point, "DARK POINT", MagicNumber, clrPink);
               Print("Buy - dark point");
        }
        
        if (str==sell)
        {
              OrderSend(symbol, OP_SELL, InitialLot, Bid, Slippage, Bid+StopLoss*Point, Ask-TakeProfit*Point, "DARK POINT", MagicNumber, clrPink);
              Print("sell - dark point");
        } 
        }   
      //--- close the file
      FileClose(file_handle);
      Print("Reading strategy file...");
    //  PrintFormat("Data is read, %s file is closed",sym);
     }
   else
      PrintFormat("Failed to open %s file, Error code = %d",sym,GetLastError());
       } 
      }
 
  1. chris.dotan: e I can't write in another application, like C# (file is already open in another process).

    If you allow that, how are you going to handle the reading of a partial file? You read the same file every tick, do you really want to open an order per tick?

  2.          str_size=FileReadInteger(file_handle,INT_VALUE);

    Perhaps you should read the manual. The call is for reading binary files, and you opened a text file.
       How To Ask Questions The Smart Way. (2004)
          How To Interpret Answers.
             RTFM and STFW: How To Tell You've Seriously Screwed Up.

  3. OrderSend(symbol, OP_BUY, InitialLot, Ask, Slippage, Ask-StopLoss*Point, Bid+TakeProfit*Point, "DARK POINT", MagicNumber, clrPink);

    You buy at the Ask and sell at the Bid. Pending Buy Stop orders become market orders when hit and open at the Ask.

    1. Your buy order's TP/SL (or Sell Stop's/Sell Limit's entry) are triggered when the Bid / OrderClosePrice reaches it. Using Ask±n, makes your SL shorter and your TP longer, by the spread. Don't you want the specified amount used in either direction?

    2. Your sell order's TP/SL (or Buy Stop's/Buy Limit's entry) will be triggered when the Ask / OrderClosePrice reaches it. To trigger close to a specific Bid price, add the average spread.
                MODE_SPREAD (Paul) - MQL4 programming forum - Page 3 #25

    3. The charts show Bid prices only. Turn on the Ask line to see how big the spread is (Tools → Options (control+O) → charts → Show ask line.)
      Most brokers with variable spreads widen considerably at end of day (5 PM ET) ± 30 minutes. My GBPJPY shows average spread = 26 points, but average maximum spread = 134 (your broker will be similar).