This forum is in read-only mode now. You may discuss your questions on forums of MQL4.community and MQL5.community
Bug Report List: build 141Back to topics list |
|
CoenWillemse
2004.12.16 00:53
Hi,
There still seems to be a problem with the 'extern string' side of things. It appears that if the string is initialized using either: extern string stuff; or extern string stuff = ""; the user input screen will allow you to input a string but 'stuff' will not be assigned to the value that is input and a "not initialized string" error is generated. If the string is initialized using: extern string stuff = "some default stringy thingy"; everything works fine |
|
CoenWillemse
2004.12.16 00:59
Oh yeah, I forgot to mention with regards to the above - if I do the same using other variable types (e.g. int), everything works fine no matter how I initialize the variable.
|
|
CoenWillemse
2004.12.17 00:32
Hi,
Here's a nice bit of code that makes the platform crash... int init() { Print("Starting"); return(0); } int deinit() {} int start() {} I know you're not supposed to do a return during init() but this can be useful when debugging.... However, any 'return' during an init() appears to make the platform crash. |
|
CoenWillemse
2004.12.17 00:57
Ahhh - silly me - init(), deinit() and start() all require a 'return'! The above problem seems to happen when start() hasn't got any code, including a return.
|
|
CoenWillemse
2004.12.17 06:24
Hi,
I'm getting constant MT crashes when I attempt to run the following code. Anyone got any ideas as to what could be causing this? ========================================= //+------------------------------------------------------------------+ //| commonLib.mqh | //| Coen Willemse | //| "" | //+------------------------------------------------------------------+ #import "commonLib.ex4" void split(string splitString, string splitOn, string& splitArray[]); =========================================== //+------------------------------------------------------------------+ //| commonLib.mq4 | //| Coen Willemse | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, Coen Willemse" #property library // Splits the sting 'splitString' into it's various parts, splitting on 'splitOn' void split(string splitString, string splitOn, string& splitArray[]) { // Initialise and clear out original 'splitArray' int i; int startIndex = 0; int endIndex = 0; int elementCount = 0; for (i=0; i<ArraySize(splitArray); i++) { splitArray[i] = ; } // Resize 'splitArray' to maximum string size (256) ArrayResize(splitArray, 260); // Go through 'splitString' and assign each token between 'splitOn' to 'splitArray' int splitOnLength = StringLen(splitOn); for (i=0; StringFind(splitString, splitOn, startIndex) > -1; i++) { endIndex = StringFind(splitString, splitOn, startIndex); splitArray[i] = StringSubstr(splitString, startIndex, endIndex-startIndex); startIndex = endIndex + splitOnLength; elementCount++; } // Add on last token if 'splitString' doesn't end with the 'splitOn' char(s) if (StringSubstr(splitString, (StringLen(splitString) - splitOnLength), StringLen(splitString)) != splitOn) { splitArray[i] = StringSubstr(splitString, startIndex, StringLen(splitString)); elementCount++; } // And resize the array to contain only the actual elements. ArrayResize(splitArray, elementCount); return(0); } ================================================ //+------------------------------------------------------------------+ //| signals.mqh | //| Copyright © 2004, Coen Willemse. | //| | //+------------------------------------------------------------------+ #import "signals.ex4" void MAPriceCrossOver(string gene, double& results[]); ============================================ //+------------------------------------------------------------------+ //| signals.mq4 | //| Coen Willemse | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, Coen Willemse" #property library #include <commonLib.mqh> void MAPriceCrossOver(string gene, double& results[]) { // Min/max values for the various parameters... int MAX_PERIODS = 300; int MAX_MA_METHOD = 7; int MAX_APPLIED_PRICE = 7; string splitArray[1]; double MIN_R2SCALE = 0.5; double MAX_R2SCALE = 0.8; double indValue; // Used to store current value of an indicator call double prevIndValue; // Used to store previous value of an indicator call // Split the gene into it's individual allele... split(gene, ":", splitArray); // Assign each variable with it's relevant allele int periods = StrToInteger(splitArray[1]); int maMethod = StrToInteger(splitArray[2]); int appliedPrice = StrToInteger(splitArray[3]); double r2Scale = StrToDouble(splitArray[4]); // Check to see if valid input has been provided... if (periods < 1 || periods > MAX_PERIODS) { Alert("MAPriceCrossOver: 'periods' range is 1 to " + MAX_PERIODS + "!!"); } if (maMethod < 1 || maMethod > MAX_MA_METHOD) { Alert("MAPriceCrossOver: 'maMethod' range is 1 to " + MAX_MA_METHOD + "!!"); } if (appliedPrice < 1 || appliedPrice > MAX_APPLIED_PRICE) { Alert("MAPriceCrossOver: 'appliedPrice' range is 1 to " + MAX_APPLIED_PRICE + "!!"); } if (r2Scale < MIN_R2SCALE || r2Scale > MAX_R2SCALE) { Alert("MAPriceCrossOver: 'r2Scale' range is " + MIN_R2SCALE + " to " + MAX_R2SCALE + "!!"); } // Work out which prices to use for the calculation... int prices = 0; switch (appliedPrice) { case 1: prices = PRICE_CLOSE; break; case 2: prices = PRICE_OPEN; break; case 3: prices = PRICE_HIGH; break; case 4: prices = PRICE_LOW; break; case 5: prices = PRICE_MEDIAN; break; case 6: prices = PRICE_TYPICAL; break; case 7: prices = PRICE_WEIGHTED; break; } Print("Running"); ArrayResize(results, 2); results[0] = 0.111; results[1] = 0.222; return(0); } =================================================== //+------------------------------------------------------------------+ //| Testie1.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #include <signals.mqh> int init() { Print("Starting"); return(0); } int deinit() { return(0);} int start() { double indResults[1]; MAPriceCrossOver("1:20:6:1:0.5", indResults); for (int i=0; i<ArraySize(indResults); i++) { Print(indResults[i]); } return(0); } //+------------------------------------------------------------------+ |
|
CoenWillemse
2004.12.17 08:22
Hi MetaQuotes,
I think I may have spotted a documentation fault on your website. Under the section "PreProcessor" the follow is documented: "Functions are imported from MQL4 compiled modules (*.ex4 files) and from operating system modules (*.dll files). In the latter case, the imported functions are also declared. A new #import command (it can be without parameters) finishes the description of imported functions". As far as I can work out, BOTH types of import (MQL4 and .dll) files require function declarations in an 'include file'. I tried it without a declaration but the compiler starts making noises about "function not found" etc. |
|
Slawa
2004.12.17 12:30
declarations in the included *.mqh files are optional and not required strongly.
but declarations are to be present in any case if you call imported functions |
Download MetaTrader 5 (450 Kb, web installer) — a new terminal for financial markets
