//================================================================================== 4 ==
double AT[33]; // Массив для внешних переменных
bool New_Parametr = false; // Обновления параметров пока не было
for (int i=0; i<=32; i++) // Поищем обновлённый параметр
{ // Если какой-то параметр обновлён..
if(NormalizeDouble(AT[i], 8) != NormalizeDouble(Instrument[0][0][i][0],8))
{
New_Parametr = true; // .. запоминаем этот факт..
for (i=0; i<=32; i++) // .. то присвоим новые значения всем
AT[i] = Instrument[0][0][i][0]; // Для удобства пользования
break; // .. и выходим из цикла перебора
}
}
//================================================================================== 5 ==
int Strategy = NormalizeDouble(AT[0],0);
switch(Strategy)
{
レディース&ジェントルマンズ!
私の質問に答えてください。
コードのどこで、どのように外部変数を 指定すればよいのか?
上の例ではよくわからない。
//================================================================================== 4 == double AT[33]; // Массив для внешних переменных bool New_Parametr = false; // Обновления параметров пока не было for (int i=0; i<=32; i++) // Поищем обновлённый параметр { // Если какой-то параметр обновлён.. if(NormalizeDouble(AT[i], 8) != NormalizeDouble(Instrument[0][0][i][0],8)) { New_Parametr = true; // .. запоминаем этот факт.. for (i=0; i<=32; i++) // .. то присвоим новые значения всем AT[i] = Instrument[0][0][i][0]; // Для удобства пользования break; // .. и выходим из цикла перебора } } //================================================================================== 5 == int Strategy = NormalizeDouble(AT[0],0); switch(Strategy) {アプリケーションの設定にある外部変数がAT_1...AT_32と脱人格化しないようにするには、それぞれの数字が何を表しているのか覚えられないので、どうしたらよいでしょうか。
ストラテジーの外部変数の値は、Expert Advisor の設定で指定します(外部変数の値も任意に指定できます)。
外部変数の名前は、Expert Advisor の AG_exp.ex4 のコードに記述されているため、Expert Advisor 内で変更することはできません。
Expert Advisorの外部変数名は、Instrument配列を介して、ストラテジーの添付ファイルに渡されます。
Expert Advisor の外部変数に対応するストラテジーのローカル変数の名前は、ストラテジー内で変更することができます。
この例では、このようなケースを想定しています。
ご希望により、独自の名称を指定することができます。
例えば,AT[i]の代わりにAlfa, Betaなどを指定する。
Array Instrument [][]:http://autograf.dp.ua/Pages/2/26/267/2676.htm
AG_AT()におけるストラテジーhttp://autograf.dp.ua/Pages/2/26/267/26711/26711_1.htm
添付するストラテジー: http://autograf.dp.ua/Pages/2/26/267/26711/26711_2.htm
コーディング戦略の例
http://autograf.dp.ua/Pages/2/26/267/26712/26712_1.htm
иhttp://autograf.dp.ua/Pages/2/26/267/26712/26712_2.htm
今ならわかる。プログラミングの経験がないと、すぐには理解できない。ありがとうございます。
Если программно, то можно воспользоваться функцией ObjectDelete() или ObjectsDeleteAll().
また、戦略のどこに入れればいいのか?それとも、カスタム関数が呼び出されるたびに、オブジェクトが作成され、削除されるのでしょうか?
今ならわかる。プログラミングの経験がないと、すぐには理解できない。ありがとうございます。
また、戦略のどこに入れればいいのか?それとも、ユーザー関数が呼び出されるたびにオブジェクトが作成され、削除されるのでしょうか?
ユーザー機能や戦略の中で規定する必要はないのです。
簡単な別のスクリプトを作成します。ストラテジーをOFFにした後、ウィンドウに放り込むと、不要なものを全て削除してくれます。
(AG5では、ストラテジーに何らかの工夫をする必要がありますが、解決策はMQL5の可能性に依存します)
的確なアドバイスをありがとうございました。私を過大評価しているのはあなただけです。まだスクリプトを扱ったことはないのですが、その方向でやっていこうと思います。できれば、アナログのリンクを教えてください。
今のところ、インジケーターにしか触れていません。
Vladislav Goshkov (VG) の TD_Points&Line_mgtd1.1.mq4 をアナログとして、レポート作成用に log.mq4 Copyright © 2006, komposter を追加して、2000行以上の私のインジケータを取得したものである。
そのスキームを作りました。行数は約500行です。切るかもしれませんが、今のところ大丈夫です。
アイコンで
// --- // ---は切り出す場所です。
とりあえず構造は決まっているので、希望する機能を実現したい。そして、ルールに従ってすべてを梳いていく(品質に対するコストは幾何級数的に 上昇する)。
まあ、SRCに521行目はないんですけどね。"テキストが許容サイズより大きい "と表示される。ファイルを添付する必要があります
この段階では、特殊な機能やアプリケーションの種類に慣れる必要があります。
MQL4のテキストを 手に取り、1つ1つ最初から読んでいくのがベストです。何か質問があれば、投稿してください。
この段階では、特殊な機能やアプリケーションの種類に慣れる必要があります。
MQL4のテキストを 手に取り、1つ1つ最初から読んでいくのがベストです。何か質問があれば、投稿してください。
あなたのマニュアルは私の参考書です。ダウンロードして印刷し、いつも使っています。
読んでいてわからないことや、カバーされていないことがあると、疑問が湧いてきます。
外部ファイルへのデータ書き込みとニュースファイルからの読み込みの2つのサンプルがあり、これはStart()関数を1回呼び出したものです。Andrey Khatimlianskii (komposter)が私が必要とするものを作るサンプルを見つけるまで、 1ヶ月以上いじくりまわしました。すなわち、init() - レポートのテーブルヘッダ(約30カラム)の形成、 start() - セッションの各ディールのパラメータを含む行の形成 、deinit() -セッションの 結果の形成である。そして、3種類のレポート(各トランザクションのパラメータを含む表、セッションの合計を含む列、セッションの合計を含む表)を作成し、Excelでさらに処理するための設定を変えて使用することができます。ち なみに、deinit()では ObjectsDeleteAll()。でも、それは後の話ですが、最初からグラフ( )を山ほど作って、テスターでも実機でもすべてを見て分析できるようにしていたんです。MQL-4 にはデバッガがないので、プログラミングをするときにとても助かります。こうすることで、プログラムがどんなライン(始値・終値条件、目標、取引ライン)をどのように構築しているかをチャート上で見ることができます。 ただし、すべてインジケーターの範囲内なので、リアルタイムに取引するわけではありません。そのため、Expert Advisorにアタッチして非仮想取引を可能にし、さらに、自動最適化が可能なテスターレポートデータを利用できるようにする必要があるのです。しかも、これまで インジケーターに実装されていた既存の機能を失うことなく、このようなことができるのです。
残念ながら、チュートリアル495ページ、 AutoGraf-4マニュアル180ページ、 MetaEditor、 MTヘルプ 370ページ 、全てを紹介することは不可能で、フォーラムを読むだけでは足りない生活になって います。でも、あくまでも遊び心です。
ストラテジー関数のコード体系(インジケーターアルゴリズムに基づく)を作りましたが、ObjectsDeleteAll()のスクリプトをどこに、どのように置 けばいいのかがわかりません?>> ぜひ、ご覧になってください。
ストラテジー機能コード図(インジケーターアルゴリズムに基づく)
//+------------------------------------------------------------------+ //| Shema_3_TD_BLS_21_1.mq4 | //| Copyright © 2009, Leonid Belskiy | //| leonid.belskiy@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Leonid Belskiy" #property link "leonid.belskiy@gmail.com" //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж #property library //ж //ж #import "AG_Lib.ex4" //ж int AG_Magic_Number(); // Вычисление MN //ж int AG_Message(string & Message[], string _Text); // Запись сообщений в массив Message[] //ж // Запись управляющих воздействий ф-ии АТ в массив Manager[][]: //ж int AG_Set_Instr(double & Manager[][], int ii, double v1, double v2, double v3, //ж double v4, double v5, double v6, int io , int ih); //ж int AG_Delete_Instr(double&Manager[][], int ii, int io,int ih); //Удаление инструментов //ж #import //ж //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //ж int TD_BLS_21_2(int Parol_S, double Order[][], string Object[], //ж double Instrument[][][][], int Ddraw_Object[][], //ж double& Tuning[], double& Manager[][], string& Message[]) //ж { //ж static int Count = 0; // Счётчик посещений этого блока //ж //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //ж double Lot= NormalizeDouble(Tuning[1],2); // Значение лотов //ж int Per = NormalizeDouble(Tuning[2],0); // Значение % (целое) //ж int Slip = NormalizeDouble(Tuning[3],0); // Проскальзывание (пунктов) //ж int SL = NormalizeDouble(Tuning[4],0); // StopLoss (пунктов) //ж int TP = NormalizeDouble(Tuning[5],0); // TakeProfit (пунктов) //ж int Ds = NormalizeDouble(Tuning[6],0); // Дистанция (пунктов) //ж int St = NormalizeDouble(Tuning[7],0); // Шаг модификации (пунктов) //ж //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //ж if (Count==0) // Это можно делать один раз в начале //ж { // Пример сообщения (максимум 62 симв): //ж AG_Message(Message, "Разработчик J.Smith, http://company.com"); //ж Count++; // Количество посещений этого блока //ж //ж Lot = 0.1; // Если количество лотов Lot (Tuning[1]) больше нуля, .. //ж Per = 0; // .. независимо от значения переменной Per (Tuning[2]). //ж // Lot = 0.0; // 0.0 означает, что колич лотов высчитывается в AutoGraf //ж // Per = 7; // .. на основе значения % (здесь 7%) суммы баланса //ж Slip = 1; //ж SL = 25; //ж TP = 100; //ж // Ds = 20; //ж // St = 3; //ж Tuning[1] = Lot; // Значение лотов //ж Tuning[2] = Per; // Значение % (целое) //ж Tuning[3] = Slip; // Проскальзывание (пунктов) //ж Tuning[4] = SL; // StopLoss (пунктов) //ж Tuning[5] = TP; // TakeProfit (пунктов) //ж Tuning[6] = Ds; // Дистанция (пунктов) //ж Tuning[7] = St; // Шаг модификации (пунктов) //ж AG_Message(Message,"Изменение настроек из АТ."); // Пример сообщения (макс.62 симв.) //ж return(1); // Выход после перенастроек параметров //ж } //ж //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //ж int MN; // MagicNumber в ф-ии AG_Magic_Number() //ж string Comm = "AG_AT"; // Комментарий (рекомендуется "AG_AT") //ж static int Ticket; // Номер ордера //ж int _Ord_Ticket = 0; // Номер ордера //ж double _Ord_Lots = 0; // Полное закрытие //ж //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //ж double AT[33]; // Массив для внешних переменных //ж bool New_Parametr = false; // Обновления параметров пока не было //ж for (int i=0; i<=32; i++) // Поищем обновлённый параметр //ж { // Если какой-то параметр обновлён.. //ж AT[1]=11; //ж //ж if(NormalizeDouble(AT[i], 8) != NormalizeDouble(Instrument[0][0][i][0],8)) //ж { //ж New_Parametr = true; // .. запоминаем этот факт.. //ж for (i=0; i<=32; i++) // .. то присвоим новые значения всем //ж AT[i] = Instrument[0][0][i][0]; // Для удобства пользования //ж break; // .. и выходим из цикла перебора //ж } //ж } //ж //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж if((nTime!=Time[0])||(CurPeriod!=Period())) // На новом баре или изменении таймфрейма все пересчитываем { // Period Возвращает значение числа минут периода для текущего графика. //================================================= //******** Поиск опорных точек предложения ******** //================================================= for(i=2+StepBack,D=2,NP=0; (NP<D)&&(i<Bars); i++) // Перебираем бары влево начиная со 2-го бара от текущего { // Begin // --- // --- } // End; //================================================= //********** Поиск опорных точек спроса *********** //================================================= for(i=2+StepBack,D=2,NP=0; (NP<D)&&(i<Bars); i++) // Перебираем бары влево начиная со 2-го бара от текущего { // Begin // --- // --- } // End; //================================================= //**** Рисуем TD-линии **** //================================================= // --- // --- CurPeriod=Period(); // Соответствие минут графика с минутами системы nTime=Time[0]; // Соответствие время текущего и бара программы } //================================================= //**** Формирование сигналов для сделок **** //================================================= Fun_New_Bar(); // Определение нового бара //================================================= //**** Формирование сигналов на покупку **** //================================================= if((Close[i]>UpP[0]+UpV*(UpB[0]-i)+Puncture*Point) && (High[i+1]<=UpP[0]+UpV*(UpB[0]-(i+1)))) // Сигнал на покупку { // --- // --- Нахождение баров для расчета проекторов // --- // --- Расчет цен проекторов // --- // --- Расчет размеров проекторов if(NoQw ... ) // Определение квалификаторов прорыва { // --- // --- Формирование массива цен уровней целей // --- // --- Создаем и рисуем сигнал на покупку кружок (красный) if(Flag_Up==true) { // --- // --- Создаем и рисуем линию на покупку (красный) // --- // --- Создаем и рисуем линии целей //================================================ //**** Открываем сделку Buy **** //================================================ if(MiB_Up[1]==0 && Flag_Up_CD_Start==false && Flag_Up_Start==false && Flag_Dn_Start==false) { MiB_Up[1]=i; // Массив номеров баров точек Up сделки MiB_Up[1]-левая, MiB_Up[0]-правая MiP_Up[1]=Close[i]; // Массив цен точек Up сделки MiP_Up[1]-левая, MiP_Up[0]-правая MiBT_Up[1]=TimeCurrent(); // Количество секунд в момент открытия сделки Flag_Up_CD_Start=true; // Флаг рисования линий сделок на покупку - покупки запрещены Flag_Up_CD_End=false; // до закрытия сделки и образования нового бара Flag_Dn_Start=true; // Запрещено открывать противоположную Dn сделку // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж AG_Message(Message, "АТ: сработал критерий открытия Buy."); // Сообщение(макс.62симв) ж MN = AG_Magic_Number(); // Вычисление MagicNumber (рекомендуется)ж OrderSend( Symbol(), OP_BUY, Lot, Ask, 2, Bid-SL*Point, Bid+TP*Point, Comm, MN); // Открытие ордера Buy: ж // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж } bay++; // Счетчик нарисованных линий целей на покупку Flag_Up=false; // Линии нарисовали - флаг опустили до образования нового бара } } } //================================================= //**** Закрываем сделку Buy **** //================================================= if(Flag_Up_CD_Start==true && Flag_Up_CD_End==false) // Флаг конца рисования линий сделок на покупку - закрытие сделки { // Пока сделка открыта, пересчитываем точку [0] и перерисовываем линию // --- // --- // Расчет времени слелки (статистика отчета) // --- // --- // Расчет результата слелки (статистика отчета) // --- // --- // Рисуем линию сделки Up //-------жжжжжжжжжжжжжжжжжжжжжжжжж Выбор условий закрытия слелки Up if(CD_TrSL && Close[i]<iP_Up-TrStopLoss*Point) // (TrStopLoss==TrSL) Если цена пересекла TrStopLoss { // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж if (NormalizeDouble(Order[1][6],0) == 0.0) // Если тип ордера Buy ж { ж _Ord_Ticket = NormalizeDouble(Order[1][4],0); // Номер ордера ж _Ord_Lots = NormalizeDouble(Order[1][5],2); // Полное закрытие ж OrderClose(_Ord_Ticket, _Ord_Lots, Bid, 2); // Закрыть ордер Buy ж } ж // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж // --- // --- // Расчет времени по всем Up сделкам (статистика отчета) // --- // --- // Расчет времени по всем сделкам (статистика отчета) // --- // --- // Расчет баланса и результатов Up сделок (статистика отчета) // --- // --- // Формируем строку отчета (статистика отчета) } WindowRedraw(); } //================================================= //**** Формирование сигналов на продажу **** //================================================= if((Close[i]<DownP[0]+DownV*(DownB[0]-i)-Puncture*Point) && (Low[i+1]>=DownP[0]+DownV*(DownB[0]-(i+1)))) // Сигнал на продажу { // --- // --- Нахождение баров для расчета проекторов // --- // --- Расчет цен проекторов // --- // --- Расчет размеров проекторов if(NoQw ... ) // Определение квалификаторов прорыва { // --- // --- Формирование массива цен уровней целей // --- // --- Создаем и рисуем сигнал на продажу кружок (синий) if(Flag_Dn==true) { // --- // --- Создаем и рисуем линию на продажу (синий) // --- // --- Создаем и рисуем линии целей //================================================= //**** Открываем сделку Sell **** //================================================= if(MiB_Dn[1]==0 && Flag_Dn_CD_Start==false && Flag_Dn_Start==false && Flag_Up_Start==false) { MiB_Dn[1]=i; // Массив номеров баров точек Dn сделки iB_Up[1]-левая, iB_Dn[0]-правая MiP_Dn[1]=Close[i]; // Массив цен точек Dn сделки iP_Dn[1]-левая, iP_Dn[0]-правая MiBT_Dn[1]=TimeCurrent(); // Массив времени баров содержащих точки Dn сделки iBT_Dn[1]-левая, iBT_Dn[0]-правая Flag_Dn_CD_Start=true; // Флаг начала рисования линий сделок на продажу Flag_Dn_CD_End=false; // Флаг конца рисования линий сделок на продажу Flag_Up_Start=true; // Запрещено открывать противоположную Up сделку // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж AG_Message(Message, "АТ: сработал критерий открытия Sell."); //Сообщение(макс62симв) ж MN = AG_Magic_Number(); // Вычисление MagicNumber (рекомендуется)ж OrderSend( Symbol(), OP_SELL, Lot, Bid, 2, Ask+SL*Point, Ask-TP*Point, Comm, MN); // Открытие ордера Sell: ж // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж } sell++; // Счетчик нарисованных линий целей на продажу Flag_Dn=false; // Линии нарисовали - флаг опустили до образования нового бара } } } //================================================= //**** Закрываем сделку Sell **** //================================================= i=0; if(Flag_Dn_CD_Start==true && Flag_Dn_CD_End==false) // Флаг конца рисования линий сделок на продажу - закрытие сделки { // Пока сделка открыта, пересчитываем точку [0] и перерисовываем линию // --- // --- // Расчет времени слелки (статистика отчета) // --- // --- // Расчет результата слелки (статистика отчета) // --- // --- // Рисуем линию сделки Dn // --- // --- //-------жжжжжжжжжжжжжжжжжжжжжжжжж Выбор условий закрытия слелки Dn if(CD_TrSL && Close[i]>iP_Dn+TrStopLoss*Point) // (TrStopLoss==TrSL) Если цена пересекла TrStopLoss { // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж if (NormalizeDouble(Order[1][6],0) == 1.0) // Если тип ордера Sell ж { ж _Ord_Ticket = NormalizeDouble(Order[1][4],0); // Номер ордера ж _Ord_Lots = NormalizeDouble(Order[1][5],2); // Будем закр.ордер полностью ж OrderClose(_Ord_Ticket, _Ord_Lots, Ask, 2); // Закрыть ордер Sell ж } ж // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж // --- // --- // Расчет времени по всем Dn сделкам (статистика отчета) // --- // --- // Расчет времени по всем сделкам (статистика отчета) // --- // --- // Расчет баланса и результатов Dn сделок (статистика отчета) // --- // --- // Формируем строку отчета (статистика отчета) } WindowRedraw(); } } // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж return(1); // Нормальный выход ж } ж // жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж void Fun_New_Bar() // Функция определения образования нового бара // --- // ---しかし、まさに 私は(インジケータアルゴリズムをベースに)戦略関数コードスキームを作成し、どこで、どのように ObjectsDeleteAll()のスクリプトを挿入 するのかわからない?取引機能を正しく入力したか("zzzzz "でハイライトされている)?ぜひ一度、ご覧ください。
ずいぶん先走ったことを言ってるんじゃない?
プログラミングでは、感覚で操作することはできません。
プログラマーが全く理解していない、あるいは理解していないものを自分のコードに使ってはならない。
そうすると、何もできなくなる。
プログラミングは、おそらく他のどの活動よりも、その本質において、完全な明瞭さと完全な自己申告を必要とします。
まずは初歩的なコードを書くことから始めましょう。より複雑なものに移るのは、コードのすべての文字を完全に説明できるようになってからにしましょう。
--
教科書には、シンプルで簡単なExpert Advisorの例が掲載されています。
先に、プログラミング入門で、アプリケーションプログラムの分類(Expert Advisor、スクリプト、インジケーターの符号と違い)があります。
スクリプトをExpert Advisorに「プラグイン」することはできません。これは、独立した別のプログラムです。
一目見て、あなたのコードの書式が悪いと言えます。
それに、ほとんどのブロックは機能として設計することができます。その方がわかりやすい(そうでないと、数ヶ月後に自分のコードを読めなくなる)。
まったくその通りです。すべての点で同意します。建設的な 批評に時間を割いていただき、ありがとうございます
インクルードとは、AG_AT()またはその関数にスクリプト操作をリンクするコードを記述し、ストラテジーを実装することを意味します。
チュートリアルでは、単純なExpert Advisorの例ではstart()が含まれていますが、通常のものでは、すべての特殊関数が存在します。特に 問題はないのですが、「食欲は 後からついてくる」と言いますからね。
問題は、AutoGraf-4の 素晴らしい機能をどのように使うかです。どうしたらいいのでしょうか?